多态是程序根据对象的不同采取不同的措施。多态分编译时多态和运行时多态。编译时的多态:设计时多态方法重载;运行时多态:程序运行时动态决定调用哪个方法。
必要条件:1、满足继承关系;2、父类引用指向子类对象。
如下所示
Animal one = new Animal();
Animal two = new Cat();
Animal three = new Dog();
one.eat();
two.eat();
three.eat();
运行结果:
可以调用子类重写父类的方法以及父类派生的方法,但无法调用子类独有的方法。
如下所示
Cat temp =(Cat)two;
temp.run();
运行结果:
这里必须进行强制类型转换,且必须满足转换条件(可用instanceof判断),转换后可调用子类特有的方法。
子类的模板,用abstract修饰,抽象类不允许实例化,但可以向上转型指向子类实例
abstract修饰方法为抽象方法,抽象方法没有方法体,只能在抽象类里声明。
应用场景:某个父类只知道其子类应该包括怎样的方法,但无法知道子类具体怎样实现。可避免子类设计的随意性和父类的无意义性。
包含抽象方法的类一定是抽象类
抽象类可以没有抽象方法
private、static、final不能和abstract同时出现
将单一功能抽象提取出来成为接口,关键字:interface;应用接口:implements
接口中的方法默认为public抽象方法
接口访问权限为public或default
当一个类实现类口时,要么实现接口中的全部方法,要么将其设置为抽象类
接口中可以包含常量,默认权限为public、static、final
default修饰的方法为默认方法,可带方法体,实现类可根据需要选择性实现
static修饰的方法也能带方法体,不可被实现类重写
一个实现类可实现多个接口
接口的实现要在继承的后面
接口可以多继承(extends ifather1,ifather2)
本文章使用limfx的vscode插件快速发布