2018-12-15
Day07 接口、多态、模板设计模式实例
1.接口
1.1接口的定义
接口就是是Java语言中一种引用类型,是方法的集合。
如果说类的内部封装了成员变量、构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法 (JDK 9)。
接口的定义,它与定义类方式相似,但是使用 interface 关键字。它也会被编译成.class文件,但一定要明确它并 不是类,而是另外一种引用数据类型。
1.2接口的注意要点:
1.接口中的方法定义不需要Abstract 来修饰,默认就是抽象的
2.接口是不可以实例化的,需要有类来实现接口的语法:
class +类名+implements +接口名,接口名,........{
// 分别实现每一个接口的方法}, 继承了接口的默认方法,即可以直接调用,也可以重写。
4.在类中可以定义属性,可以通过接口的实现类的实例来访问,还可以通过接口名来访问。
5.接口中的属性不能被修改,我们接口的属性默认都是final static的,通常在接口中来定义属性把他作为常量,常量的名字规范是字母大写,而且多个单词之间用下划线来分隔。eg: FILE_PATH
6.接口可以继承接口,可以实现多级继承,多继承,多实现
要求是jdk1.7以后
注意:
1.接口中,有多个默认方法时,实现类都可继承使用。如果默认方法有重名的,必须重写一次。
2.当一个类,既继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的默认方法重名,子类就近(离子类名最近)选择执行父类的成员方法。
1.3接口的应用
1.接口定义是一种标准,可以使我们的代码分层开发,分模块开发。
2.降低代码的耦合性,提高代码的可扩展性和可维护性。
3.接口改变了单继承的局限。
4.接口可以实现多继承,而类不可以实现多继承。
5.处理的接口方法相同时会合二为一。
6.接口的多继承:(接口继承接口使用关键字extends),如果父接口中的默认方法有重名的,那么子接口需要重写一次。
注意:1.子接口重写默认方法时,default关键字可以保留。
2.子类重写默认方法时,default关键字不可以保留。
1.4接口和抽象类的区别详解:
1.接口的所有方法都是抽象的,抽象类里面的抽象方法可以是抽象的也可以是非抽象的。
2.接口和抽象类都不能实例化,而接口需要类来实现后实例化实现类,抽象类需要类来继承然后实现实例化子类。
3.抽象类只能单继承,接口可以单继承,也可以多继承多级继承,接口还可以多实现(jdk1.7以上)。
4.接口中的属性是static final 类型的,抽象类中的属性跟普通类中的属性没有什么区别。
5.接口中的方法默认就是抽象的,不需要加abstract,抽象类中的抽象方法需要加Abstract关键字。
2.多态
2.1多态的概念
是指同一行为,具有多个不同表现形式。
从继承的角度理解:父类的引用,子类的实现
Fu fu=new Zi();
实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展性与便利。
2.2继承多态
1.必须有继承关系,在抽象类中可以定义多态的抽象方法,通过子类来继承这个抽象类然后复写抽象类中的抽象方法以达到多态的效果。
2.3多态子类的实例可以赋给父类的引用
子类的实例用父类的类型来接收
语法 :父类名+变量=new + 子类名
变量 . 父类属性=“。。。”;//调用父类的属性,子类的特有的方法不能通过父类来调用
2.4 父类的实例用子类的类型来接收
需要用到转型,强制转换
语法 :子类名+变量=(子类名)new +父类名
为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的效验。
变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。 如果变量不属于该数据类型,返回false。
3.模板设计模式
第一种角色:抽象模板
定义三种方法:第一个抽象方法需要子类去实现,子类必须实现第二次扩展方法,是一个空方法,子类可以去复写也可以不复写。第三个私有的最终方法,是不可以复写的。第四个模板方法定义了每一个方法的执行顺序和逻辑。
第二种角色:具体模板要继承抽象模板
需要实现抽象模板中的抽象方法,才可以扩展抽象模板中的抽象方法。