抽象类&接口
抽象类和抽象接口
抽象类是把相同的但不确定的东西提取出来,并要求在其子类中实现中
(例如,定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。)
用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法(抽象类 abstract class XXX; 抽象方法: abstract void xxx(); // 抽象方法没有主体)
抽象类可以有非抽象方法,非抽象属性,但是抽象方法必须在抽象类里
抽象类不能被实例化,因为存在方法为被具体化, 抽象方法必须是public类型(默认都是public)
(抽象类意义:进行子类行为约束,种类管理)
接口类
接口是一种特殊的抽象类,其只包含常量和方法的定义,没有变量和方法的实现
接口设计的目的是为了不让类受限于单一继承的关系,而可以灵活的同时继承一些共有的特性,从而达到多重继承的目的。
实现一个接口就得实现接口中所有的方法;
接口中的方法都是抽象的;
多个无关的类可以实现同一个接口,一个类也可以实现多个无关的接口。
抽象类和接口差异
相同:
1、都能被继承
2、继承的类都必须将未实现的函数实现
3、只关注方法的定义,不关注方法的实现
4、都不能被实例化
差异:
1、一个子类可以继承多个接口,但是只能继承一个父类
2、接口只能包含常量和抽象方法
继承
抽象类(接口)被对象引用后,只能访问抽象类的属性和方法,不能访问抽象类没有的属性和方法;
如果抽象类和子类同时拥有相同的属性和方法,则抽象类的引用返回接口的属性;子类的实例返回子类的属性;抽象类和子类的实例都返回子类的方法
参考:
https://www.cnblogs.com/ibelieve618/p/6410910.html
https://baijiahao.baidu.com/s?id=1638387734156060633&wfr=spider&for=pc
https://www.cnblogs.com/zcscnn/p/7743507.html