抽象类(abstract class)和接口(interface)有什么异同

从类的角度:抽象类 abstract class 只能有一个父类 接口interface可以有多个父接口

修饰符只能是public或default

从内部属性的角度:

抽象类属性默认default。接口属性默认是public static final修饰

从内部方法的角度

抽象类中可以定义构造方法(注意不能实例化),抽象方法,普通方法

在这里 需要了解抽象类构造方法的作用:

(1)初始化抽象类内部声明的通用变量,并被各种实现使用。

(2)即使你没有提供任何构造函数,编译器将为抽象类添加默认的无参数的构造函数,没有的话你的子类将无法编译,因为在任何构造函数中的第一条语句隐式调用super(),Java中默认超类的构造函数。

(3)抽象类不能创建对象不调用构造函数,但是抽象类的子类调用父类的构造函数,抽象类做父类可以写构造函数供子类调用。

接口中不能定义构造方法 方法全部都是抽象方法(可以省略abstract关键字)

构造函数在创建对象时调用,接口不能创建对象,接口的子接口不能创建对象,接口的实现类不会调用接口的构造方法,所以不用写构造函数。

从应用的角度

多态--抽象父引用指向子类,调用父类声明的方法和属性,不能调用子类特有的,其中,子类重写了调用子类方法,没重写调用父类的方法。

接口引用指向实现类,调用父类声明的方法和属性,不能调用子类特有的,调用方法时,调用实现类中的方法。

抽象类定义子类的公共方法,接口中定义多个无关类的公共方法。

(OnOff定义开关方法,实现类可以是窗户电脑等,这两个实现类毫无关系。)

(Person类定义work方法,定义所有人的抽象方法work,使用这个方法,必须是Person类的子类,必须和Person有父子关系。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值