java多态

多态是程序根据对象的不同采取不同的措施。多态分编译时多态和运行时多态。编译时的多态:设计时多态方法重载;运行时多态:程序运行时动态决定调用哪个方法。

必要条件: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插件快速发布