多态性
代码示例:
package com.imooc;
public class Inital {
public static void main(String[] args) {
// TODO Auto-generated method stub
Anmial obj1=new Anmial();
Anmial obj2=new Dog();//父类的引用是可以指向子类对象
//Dog obj3=new Anmial();//反之,不可使用
Dog boj4=new Dog();
Anmial obj3=new cat();
obj1.eat();
obj2.eat();
obj3.eat();
boj4.aaa();
}
}
package com.imooc;
public class Anmial {
public void eat() {
System.out.println("这是啥");
}
}
package com.imooc;
public class Dog extends Anmial{
public void eat() {
System.out.println("这是子类");
}
public void aaa() {
System.out.println("这是我单独的哦");
}
}
注意:子类中独有的类,父类不能直接进行调用
引用类型转换
通过instanceof运算符避免类型转换的安全性问题
instanceof 严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:
boolean result = obj instanceof Class
其中 obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。
注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。
样例: