Java多态有多种表现形式
- 普通类的多态
- 抽象类的多态
- 接口的多态
但是必须要存在继承关系
有自上而下转型或者自下而上转型,而自下而上转型是自动的
比如我们创建一个父亲类然后两个子类,一个儿子类一个女儿类,儿子类和女儿类同时继承的父类的eat方法,而儿子类存在自己单独的跑步方法。
package ManyT; public class Test { public static void main(String[] args) { Father father = new Son(); Father father1 = new Daughter(); Son son =(Son) new Father(); father.eat(); father1.eat(); son.run(); } } class Father { void eat(){ System.out.println("父亲吃肉"); } } class Son extends Father{ @Override void eat() { System.out.println("儿子吃白菜"); } void run(){ System.out.println("儿子再跑"); } } class Daughter extends Father{ @Override void eat() { System.out.println("女儿吃萝卜"); } }
自下向上转型
首先定义方法为
父类类型 [父类变量名] = new 子类类型();
此时这个父类变量名字可以调用子类的方法。
注意:如果父类中的方法是静态的(static),子类中的同名方法也是静态的(static),多态调用的依然是父类的成员方法。原因:静态属于类,不属于对象;多态性是针对对象而言的,和静态无关。所以用父类的引用 调用静态方法必然是执行父类的方法。)
Father father = new Son(); father.eat();
此时输出儿子在吃
自上向下转型
定义方法为
子类类型 [子类变量名] = (子类类型) new 父类类型();
此时可以调用该子类单独的方法
Son son = (Son) new Father(); son.run();
此时调用son独有的方法输出儿子在跑。