抽象类与接口

来源:互联网 发布:军工网络概念股 编辑:程序博客网 时间:2024/05/21 15:38

一、抽象类

抽象类是从多个具有相同特征的类中抽象出来的父类,以这个抽象类作为子类的模板,规定子类必须覆盖抽象类定义的抽象方法,避免子类设计的随意性。

1.抽象类和抽象方法的使用

抽象类的成员除了抽象方法外,跟普通类一样。

抽象类和抽象方法必须用abstract修饰符修饰。

抽象类可以没有抽象方法,有抽象方法的类必须定义为抽象类。

抽象类不能被实例化,它的构造方法只用于被子类调用。

抽象类的子类必须覆盖父类全部的抽象方法,否则这个子类必须定义为抽象类。

抽象方法只能被public和protected修饰,或者缺省。

抽象方法没有方法体,即没有后面的一对花括号。

抽象方法不能被private,final,static修饰。

2.抽象类与普通父类的区别

抽象类仅仅是作为一个模板的作用,抽象方法体为空,不能实例化,它就是为了继承而存在的,否则没有意义,具有更高的抽象性。

强制子类必须覆盖抽象类的抽象方法,有提示子类的作用,代码具有更强的整体性,方便代码的扩展,更有利于多态的实现。

二、接口

接口是对多个类公共方法的抽象,实现接口的类可以是完全无关的,是一种公共行为规范,规定了实现类要实现的方法。

1.接口的使用

接口的修饰符和接口的成员的修饰符只能是public或者缺省。

接口会自动为成员变量添加 public static final修饰符,也就是说接口内的成员变量只能是常量。

接口会自动为方法添加public abstract修饰符,也就是说接口内只能定义抽象方法。

接口没有构造方法和初始化块。

接口支持多继承,一个接口可以有多个直接父接口,但是接口只能继承接口,不能继承类。如 interfaceA extends interfaceB,interfaceC

一个类实现了接口后,必须覆盖接口中定义的全部抽象方法,否则这个类必须定义为抽象类。

子类继承父类同时实现接口时,implements部分要放在extends部分之后。如 son extenfs father implements interfaceA,interfaceB

2.接口与抽象类的区别

抽象类是对类的抽象,接口是对方法的抽象。

继承抽象类的子类是相似的,实现接口的类可以是完全无关的类。

0 0