(三)Java入门---抽象类和接口


一、抽象类概念

抽象类(abstract)是对类的抽象,里面可以包含抽象方法(只有声明,没有具体的实现),也可以包含正常类的变量,抽象类不能实例化,抽象类是为了子类继承而存在的,子类必须继承父类的抽象方法。

二、抽象类的相关问题

子类必须覆盖抽象类中的所有抽象方法,才能进行实例化(否则,子类里面还有继承父类的抽象方法,所以子类是抽象函数,就不能实例化)。

1、抽象类有构造函数吗?
有,可以用来给子类进行初始化。
2、抽象类可以不存在抽象方法吗?
可以的。目的是不让该类创建对象。
3、抽象关键字不可以和哪些关键字共存啊?
private不可以,如果方法都私有了,子类怎么继承啊。static不可以,如果修饰了方法,不能执行,为啥要定义这种。final修饰的方法不能覆盖。
4、抽象类一定是父类;因为抽象类想被使用,必须有人去继承并覆盖其方法,子类才能进行实例化。

三、接口(interface)

1、接口是对行为的抽象,接口中的变量被隐性制定为public static final,方法被制定为public abstract,所以方法是不具体实现的。子类可以实现多个接口内容,这叫“多实现”。Implements.
2、接口不能实例化。只有子类覆盖了接口中的所有抽象方法,子类才能进行实例化对象,否则,这个子类一定是个抽象类(因为里面有抽象方法)。
3、本质上是提高子类的扩展性,让子类可以实现更多功能的方法。
4、接口之间可以多继承(为毛啊,因为不能多继承的本质是容易造成方法体的不确定性,但是接口内没有方法体,只有方法,所以,不存在不确定性)。
5、接口具有对外暴露的规则、功能扩展,降低耦合性、多实现。

四、抽象类和接口的区别理解

例子:门都开和关的状态,所以,可以把门的开关抽象为一个抽象类;但是,不是所有的门都具有报警功能,所以,可以把报警抽象为接口,当做一种抽象的方法来实现。
继承是一个“是不是”的关系(共性关系),而接口实现则是“有没有”的关系(额外功能)。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系。
比如:一个导盲犬,肯定是属于犬类的,不能定义成犬的接口,因为犬类里面还有一般实现方法,是共性关系。但是,可以把导盲定义为接口,这个是犬的额外功能。比如其他导盲设备也可以去实现导盲功能啊。

你可能感兴趣的:(Java入门,继承)