抽象类与接口的详解

抽象类:
(1)抽象类中的成员变量可以是变量,即没有抽象类特有的修饰符(public final abtract);
也可以是常量,也就是可以被public final abstract修饰的变量。
既然可以存在变量和常量,那么我们就必须手动添加public final。 

(2)有构造函数。
1、像普通类一样,抽象类可以拥有构造方法,用于父类成员变量的初始化;无參构造会对本类私有属性进行默认初始化,因为它里面什么形参也没有,所以不赋一个具体的值;而有参构造则会对本类私有属性进行显性初始化,意思就是把形参的值赋给私有属性。

2、抽象类的构造函数之所以是用于子类访问父类数据的初始化,我个人觉得是因为子类一旦继承父类,就会首先访问父类,对父类进行初始化,因为构造方法是分配内存的实现,那么,子类如何才能更方便地分配内存呢?很显然,就是调用父类的构造方法来分配父类部分的内存,然后再调用自己的构造方法来分配子类拓展的内存。否则,如果子类完全从头开始自己分配内存,那么继承父类又有什么优点呢?因为子类有一部分是和父类完全一样的,有必要自己再从头开始分配内存吗?既然父类已经有现成的方法了,那么为什么不直接调用来分配父类部分的内存呢?所以就要先对父类进行初始化,对父类中的私有属性和我们不知道的一些参数进行初始化。


(3)抽象类中的成员方法一定要被子类全部复写,强迫子类一定要去复写父类。
(4)抽象类只能被子类单继承。
(5)抽象类的成员方法可以有方法体。


接口:
(1)接口类中的成员变量全部都是被public static final修饰的常量,所以如果我们没有添加,那么它会自动帮我们添加。
所以,接口中的常量我们可以直接利用 类名.成员变量来调用。

(2)无构造函数。
1、有一个规则就是,接口不能实例化,所以也就相当于没有构造方法,也就相当于没有为父类分配内存,也就相当于不能对父类进行初始化。
2、那父类没有构造方法的话,那么子类构造方法里面的super()指向的是谁呢?我们都知道,所有父类的父类都叫做Object类,所以super()指向的当然是Object类。

(3)接口可以被子类多实现。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值