在继承的层次结构中,每个新子类都使类变得越来越明确和具体。如果从一个子类追溯到父类,类就会变得更通用、更加不明确。类的设计应该确保父类包括它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它没有任何具体的实例。这样的类称为抽象类。(只有声明,没有具体的实现方法)
2.声明格式abstract class ClassName { abstract void fun(); }3.抽象类的说明
- 抽象类不能包含在非抽象类中;
- 抽象类是不能使用new *** 作符来初始化的;
- 包含抽象方法的类必须是抽象的(但是可以定义一个不包含抽象方法的抽象类);
- 子类可以覆盖父类的方法并将它定义为abstract;
- 及时子类的父类是具体的,这个子类也可以是抽象的;
- 不能使用new *** 作符从一个抽象类创建一个实例,但是抽象类可以用作一种数据类型。
- 抽象类中有构造函数,用于给子类对象积极性初始化;
- 抽象类中可以定义非抽象方法;
- 抽象关键字abstract和private、static、final关键字不能共存;
- 抽象类可以定义抽象方法(不定义抽象方法的目的是不让抽象类创建对象);
- 抽象类一定是父类,因为需要杯子列覆盖其所有的抽象方法才能使用。
当一个抽象类中,所有的方法都是抽象方法时,这时可以将该抽象类用另一种形式定义和表示,就引入了接口的概念。
1.定义接口(interface)是一种与类相似的结构,只包含常量和抽象方法。接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关类的多个对象的共同行为,在Java中接口被看作是一种特殊的类。
注意:接口中的成员都有固定的修饰符;成员变量: public static final;成员方法: public abstract 。
2.声明格式abstract class ClassName { abstract void fun(); }3.特点
- 接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误)。
- 方法会被隐式地指定为public abstract方法且只能是public abstract方法。
- 接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。
抽象类:一般用于描述一个体系单元,将一组共性内容进行抽取。特点:可以在类中定义抽象内容让子类实现,可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。
接口:一般用于定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能。
抽象类和接口的共同点:
- 都是不断向上抽取的结果;
- 都可以定义一种类型;
- 都用来明确多个对象的共同特征。
- 一个类可以实现多个接口,但是只能继承一个父类。
变量
构造方法
方法
抽象类
无限制
子类通过构造方法链调用构造方法,抽象类不能用new *** 作符实例化
无限制
接口
所有变量必须都是public、static、final
没有构造方法。接口不能用new *** 作符实例化
所有方法必须是公共的抽象实例方法。可以包含都不理睬的抽象实例方法、public的默认方法以及public的静态方法
- Java只允许类的扩展做单一继承,但允许使用接口做多重扩展。例如,
public class NewClass extends baseClass Implements Interfacel,...,InterfaceN{ ... }
利用关键字extends,接口可以继承其他接口。这样的接口称为子接口(subinterface)。例如,在下面的代码中,NewInterface是Interface1,...,InterfaceN的子接口。
public interface NewInterface extands Interface1,...,InterfaceN{ //constants and abstract menthods }
一个实现NewInterface的类必须实现在NewInterface,Interface1,...,InterfaceN中定义的抽象方法。接口可以扩展其他接口而不是类。一个类可以扩展它的父类同时实现多个接口。
- 所有类共享同一个根类Object,但接口没有共同根。
- 类名是一个名词。接口名可以是形容词或名词。
- 接口可以定义非相关类共有的父类型。接口比类更加灵活。
- 抽象类只能被继承,而且只能单继承。接口需要被实现,而且可以多实现。
- 抽象类中可以定义非抽象方法,子类可以直接继承使用。接口中都有抽象方法,需要子类去实现。
- 抽象类使用的是 is a 关系。接口使用的 like a 关系。
- 抽象类的成员修饰符可以自定义。接口中的成员修饰符是固定的。全都是public的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)