一、多态的三个前提
1、要有继承(接口实现)关系
2、子类要重写父类方法
3、父类引用指向父类对象
二、多态:同一个行为具有不同表现形式或形态的能力,即对象多种表现形式的体现
三、使用规则
Father man=new Son();
成员变量:看等号左边,左边是谁就优先谁,没有就去父类找,还是没有就报错(编译看左边,运行看左边)
成员方法:该方法属于谁,谁就优先,没有就找父类(编译看左边,运行看右边)
父类Father
package com.hc.duotai; public class Father { public int age = 50; public String show() { return "Father类中show方法显示我的年龄是:" + this.age; } }
子类Son
package com.hc.duotai;
public class Son extends Father {
public int age = 22;
//重写的方法
@Override
public String show() {
return "Son类中的show方法显示我的年龄是:" + this.age;
}
public void newMethod(){
System.out.println("在son类中增加的新方法");
}
}
测试Test
package com.hc.duotai; public class Test2 { public static void main(String[] args) { //向上转型:父类的引用变量指向子类的对象,就完成了向上转型 //两种情况 1 创建对象时 父类型(接口) 对象名 = new 子类型() // 2 在设计方法参数或返回值类型或类中设计属性时 声明为父类型(接口),传入的可能是父类型的子类型 //向上转型带来的问题:如果new 出来的子类型增加了新的方法,则无法通过父类型直接调用,必需向下强转成子类型才可以调用到 Father f = new Son(); //向上转型 String ret= f.show(); System.out.println(ret); //要调用new出来的类型Son的新方法,必需向下转型 Son s = (Son)f;//把f强转成son类型 s.newMethod();//新方法的调用 //假设现在的son中重写的show方法去掉了 } }