Demo
package obj;
/**
* 多态中的转型谷
*/
public class Dome {
public static void main(String[] args) {
/**
* 实例化基类
*/
//多态 - 向上转型
Animal c = new Cat();
System.out.println(c.name); // 动物
//System.out.println(c.age); //报错,因为 Animal类中没有age属性
c.skill(); //抓老鼠
System.out.println("-------------------");
//子类正常调用方式
/*Cat c1 = new Cat();
System.out.println(c1.name);//猫
System.out.println(c1.age);//5 不报错,因为 Cat 类中有age属性
c1.skill();//抓老鼠*/
/**
* 以上方法虽然能够调用到子类中的属性
* 但是 是实例化的一个新的对象
*
* 通过转型(向下转型将实例化的 Animal对象的实例转换成子类 )
* Cat a = (Cat)Cat();
*/
//向下转型
Cat a = (Cat) c;//将 Animal对象的实例转换成子类
System.out.println(a.age);//5
}
}
基类
package obj;
public class Animal {
String name = "动物";
public void skill()
{
System.out.println("警惕");
}
}
子类
package obj;
public class Cat extends Animal{
String name = "猫";
byte age = 5;
public void skill() {
System.out.println("抓老鼠");
}
}