直接上主菜:
package practice4;
public class A {
int book=6;
public void eat() {
System.out.println("Animal 吃肉");
}
}
class dog extends A{
String book="book";
public void eat() {
System.out.println("狗吃肉");
}
public void say() {
System.out.println("旺");
}
public dog() {
System.out.println("2");
}
public dog(int a,int b) {
System.out.println("1");
}
}
class cat extends A{
public void eat() {
System.out.println("猫吃鱼");
}
public void say() {
System.out.println("1");
}
}
class testDemo{
public static void main(String args[]) {
A a=new dog();
a.eat();
//a.say();
System.out.println(a.book);
dog d=(dog) a;
d.eat();
d.say();
System.out.println(d.book);
a=new cat();
cat q=(cat) a;}}
在testDemo类中,A a=new dog()使用了多态,声明的是父类A,实际引用的是子类dog,那么所造成的后果是创建的实例a引用的方法只能调用父类的方法(即是在A类中的方法,具体你可以查看会报错,原因出在a.say()语句,是由于A类中没有say方法所以报错),同样对于变量是一样的道理,输出a.book输出的是6,这就意味着调用的都是A类定义的不是实际引用的子类dog,如代码输出的那样。
多态的强制转换可以使用instanceof先验证对象是否是特定类的一个实例,再然后(type)转换。
第一次写,如有错误,欢迎指正。