抽象方法

scala快速入门系列【特质】

风格不统一 提交于 2020-01-29 06:43:07
本篇作为scala快速入门系列的第二十六篇博客,为大家带来的是关于 特质(trait) 的内容。 文章目录 特质(trait) trait作为接口使用 示例 | 继承单个trait 示例 | 继承多个trait 示例 | object继承trait 特质 | 定义具体的方法 trait中定义具体的字段和抽象的字段 使用trait实现模板模式 对象混入trait trait实现调用链模式 责任链模式 trait调用链 trait的构造机制 trait继承class 特质(trait) scala中没有Java中的接口(interface),替代的概念是——特质。 定义 特质是scala中代码复用的基础单元 它可以将方法和字段定义封装起来,然后添加到类中 与类继承不一样的是,类继承要求每个类都只能继承 一个 超类,而一个类可以添加 任意数量 的特质。 特质的定义和抽象类的定义很像,但它是使用 trait 关键字 语法 定义特质 继承特质 使用extends来继承trait( scala不论是类还是特质,都是使用 extends 关键字 ) 如果要继承多个trait,则使用 with 关键字 trait作为接口使用 trait作为接口使用,与java的接口使用方法一样。 示例 | 继承单个trait 创建一个Logger特质,添加一个接受一个String类型参数的log抽象方法

抽象类与接口

二次信任 提交于 2020-01-28 19:14:36
抽象类的概述: 抽象定义: •抽象就是从多个事物中将共性的,本质的内容抽取出来。 •例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。 抽象类: •Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。 抽象方法的由来: •多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。 •例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。 抽象类的特点:  抽象类和抽象方法必须用abstract关键字来修饰。 抽象方法只有方法声明,没有方法体,定义在抽象类中。 •格式:修饰符 abstract 返回值类型 函数名(参数列表) ; 抽象类不可以被实例化,也就是不可以用new创建对象。原因如下: •抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实例。例如:犬科是一个抽象的概念,真正存在的是狼和狗。 •而且抽象类即使创建了对象,调用抽象方法也没有意义。 抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。 抽象类的举例和代码讲解:  雇员示例: •需求:公司中程序员有姓名,工号,薪水,工作内容。

PHP中抽象类和接口的区别

半世苍凉 提交于 2020-01-28 03:02:29
抽象类 抽象类无法被实例化 ,它的作用是为所有继承自它的类定义(或部分实现)接口。 使用 abstract 关键字定义抽象类。 可以像在普通类中那样在抽象类中创建方法和属性,在大多数情况下, 一个抽象类至少包含一个抽象方法 ,抽象方法也是通过 abstract 关键字声明的。 抽象方法只有方法声明,没有方法实现 。不能编写方法体。 abstract class ShopProductWriter { protected $product = [ ] ; /** * 抽象类中可以定义普通方法 */ public function addProduct ( $shopProduct ) { $this - > product = $shopProduct ; } /** * 定义一个抽象方法,只有方法声明,没有方法实现 */ abstract public function write ( ) ; } 任何继承自抽象类的类都必须实现所有的抽象方法 ,否则它自己就必须被定义为抽象类。子类不能仅仅实现抽象方法,还必须遵守方法签名。这意味着实现方法的访问控制不能比抽象方法更严格。实现方法还需要有与抽象方法相同数量的参数,以及相同的类型提示。 class XmlProductWriter extends ShopProductWriter { /** *

Java语法进阶16-Lambda-Stream-Optional

喜欢而已 提交于 2020-01-26 14:20:44
Lambda   大年初二,大门不出二门不迈。继续学习! 函数式接口   Lambda表达式其实就是实现SAM接口的语法糖,所谓SAM接口就是Single Abstract Method,即该接口中 只有一个抽象方法 需要实现,当然该接口可以包含其他非抽象方法。   它关注方法具备什么样的功能, 强调做什么,而不是以什么形式做 。 面向对象的思想: 做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情. 函数式编程思想: 只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程 自定义函数式接口   只要确保接口中有且仅有一个抽象方法即可 修饰符 interface 接口名称 { public abstract 返回值类型 方法名称(可选参数信息);// public abstract 是可以省略的 // 其他非抽象方法内容 } 消费型接口   消费型接口的抽象方法特点:有形参,但是返回值类型是void 接口名 抽象方法 描述 Consumer <T> void accept(T t) 接收一个对象用于完成功能 BiConsumer<T,U> void accept(T t, U u) 接收两个对象用于完成功能 DoubleConsumer void accept(double value) 接收一个double值 IntConsumer void

设计模式之代理模式(一)

拈花ヽ惹草 提交于 2020-01-26 03:55:36
一、什么是代理模式 定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 组成: 抽象角色(主题):通过接口或抽象类声明真实角色实现的业务方法。 代理角色(代理对象):实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色(被代理对象):实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。 二、为什么要使用代理模式 意图 :为其他对象提供一种代理以控制对这个对象的访问。 主要解决 :在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。 应用实例: 1、Windows 里面的快捷方式。2、买火车票不一定在火车站买,也可以去代售点。 3、spring aop。 优点: 1、职责清晰。     被代理对象只负责自己实际的业务逻辑,不关心其他非本身的职责。并将其他事务可以通过代理类处理。    2、高扩展性。     无论被代理对象如何改变

PHP中的 抽象类(abstract class)和 接口(interface)

你离开我真会死。 提交于 2020-01-25 20:45:10
在谈PHP中的 抽象类(abstract class)和 接口(interface) 一、 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类。 2 .抽象类不能被直接实例化。抽象类中只定义(或部分实现)子类需要的方法。子类可以通过继承抽象类并通过实现抽象类中的所有抽象方法,使抽象类具体化。 3 .如果子类需要实例化,前提是它实现了抽象类中的所有抽象方法。如果子类没有全部实现抽象类中的所有抽象方法,那么该子类也是一个抽象类,必须在 class 前面加上 abstract 关键字,并且不能被实例化。 4 . 如果子类实现了抽象方法,那么 子类中抽象方法的访问控制不能比父类中的抽象方法访问控制更严格,也就是说(A父类,B子类) (1) 如果 A 中 abstract_func() 声明为 public ,那么 B 中 abstract_func() 的声明只能是 public ,不能是 protected 或 private (2) 如果 A 中 abstract_func() 声明为 protected ,那么 B 中 abstract_func() 的声明可以是 public 或 protected ,但不能是 private (3) 如果 A

抽象类

。_饼干妹妹 提交于 2020-01-25 16:50:12
抽象类概述 在java中,一个 没有方法体 的方法应该定义为抽象类,而类中如果有抽象方法,该类必须定义为抽象类 抽象类的特点 1、抽象类和抽象方法必须使用 abstract 关键字修饰 public abstract class Student { . . . } public abstract void eat ( ) ; 2、抽象类不一定有抽象方法,有抽象方法的类一定是抽象类 3、抽象类不能实例化 抽象类如何实例化呢? 参照多态的方式,通过子类对象实例化,这叫抽象类多态 4、抽象类的子类 要么重写抽象类中的所有抽象方法 要么是抽象类 抽象类的成员特点 1、成员变量 可以是变量 也可以是常量 2、构造方法 有构造方法,但是不能实例化 构造方法的作用是什么呢? 用于子类访问父类数据的的初始化 3、成员方法 可以有抽象方法: 限定子类必须完成某些动作 也可以有非抽象方法 :提高代码的复用性 来源: CSDN 作者: 0和1的尽头又是啥 链接: https://blog.csdn.net/qq_43205282/article/details/103841531

day09_继承、super、this、抽象类

梦想与她 提交于 2020-01-25 07:00:28
继承 由来 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。如图所示: 其中,多个类可以称为子类,单独那一个类称为父类、超类(superclass)或者基类。 继承描述的是事物之间的所属关系,这种关系是: is-a 的关系 。例如,图中兔子属于食草动物,食草动物属于动物。在继承的关系中,“子类就是一个父类”。也就是说,子类可以被当做父类看待。例如父类是员工,子类是讲师,那么“讲师就是一个员工”。可见,父类更通用,子类更具体。我们通过继承,可以使多种事物之间形成一种关系体系。 继承主要解决的问题是共性抽取。 定义 继承: 就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。 好处 提高代码的复用性。 类与类之间产生了关系, 是多态的前提。 继承的格式 通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下: 继承演示,代码如下: 定义员工类Employee,做父类 package demo01; public class Employee { // 定义name属性 String name; // 定义员工的工作方法 public void work() { System.out.println("尽心尽力地工作"); } }

日常作业2019.1.21

岁酱吖の 提交于 2020-01-25 03:43:44
作业(向上转型、向下转型) 宠物类  父类 package com.job1_21; /** * 宠物类 * @author Administrator * */ public abstract class Pet { /** * 宠物属性 */ protected String name; protected String sex; protected int health; protected int love; /** * 构造方法 */ public Pet() {} public Pet(String name,String sex,int health,int love) { this.name =name; this.sex=sex; this.health=health; this.love=love; } /** * 宠物属性setter getter */ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getHealth

JavaOOP继承

本秂侑毒 提交于 2020-01-25 00:00:40
一.继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 eg: 兔子和羊属于食草动物类,狮子和豹属于食肉动物类。 食草动物和食肉动物又是属于动物类。 所以继承需要符合的关系是:is-a,父类更通用,子类更具体。 虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。 类的继承语法 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的,一般形式如下: class 父类 { } class 子类 extends 父类 { } eg: //动物父类 public class Animal { private String name; private int id; public Animal(String myName, int myid) { name = myName; id = myid; } public void eat(){ System.out.println(name+"正在吃"); } public void sleep(){ System.out.println(name+"正在睡"); } public void