package test1;
public class aaa1 {
public static void main(String[] args) {
/*Animal a=new Animal();
a.eat();
cat c=new cat();
c.eat();
dog d=new dog();
d.eat();*/
Animal a1=new cat();
//cat类型转换成Aniamle类型,小的变成大的,是向上的自动的类型转换
//父类型的引用指向子类型对象,程序分两个阶段,编译阶段,运行阶段
//程序在编译阶段只知道a1是一个Animal类型,在运行的时候堆中的实际对象是cat类型
//在编译阶段a1引用绑定的是Animal类型中的eat方法(静态绑定)
//而程序在运行阶段堆中的对象实际是cat类型,而cat已经重写了eat方法
//所以程序在运行阶段对象的绑定方法是cat中的eat方法(动态绑定 )
a1.eat();
Animal a2=new cat();
cat c1=(cat) a2;
c1.move();
/*Animal a3=new dog();
cat c2=(cat) a3;*/
//为了避免classcastexception的发生,java引入了instanceof
//用法:计算结果为boolean,为true/false
//(引用 instanceof 类型)--->true/false
//如果结果是true,说明a引用指向堆中的对象是cat类型
Animal a3=new dog();
System.out.println(a3 instanceof cat); //在做向下转型的时候,要用instanceof
if (a3 instanceof cat){
cat c2=(cat) a3;
}
}
}
class Animal {
public void eat() {
System.out.println("好吃");
}
}
class cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void move(){
System.out.println("猫走猫步");
}
}
class dog extends Animal{
public void eat(){
System.out.println("狗啃骨头");
}
}
public class aaa1 {
public static void main(String[] args) {
/*Animal a=new Animal();
a.eat();
cat c=new cat();
c.eat();
dog d=new dog();
d.eat();*/
Animal a1=new cat();
//cat类型转换成Aniamle类型,小的变成大的,是向上的自动的类型转换
//父类型的引用指向子类型对象,程序分两个阶段,编译阶段,运行阶段
//程序在编译阶段只知道a1是一个Animal类型,在运行的时候堆中的实际对象是cat类型
//在编译阶段a1引用绑定的是Animal类型中的eat方法(静态绑定)
//而程序在运行阶段堆中的对象实际是cat类型,而cat已经重写了eat方法
//所以程序在运行阶段对象的绑定方法是cat中的eat方法(动态绑定 )
a1.eat();
Animal a2=new cat();
cat c1=(cat) a2;
c1.move();
/*Animal a3=new dog();
cat c2=(cat) a3;*/
//为了避免classcastexception的发生,java引入了instanceof
//用法:计算结果为boolean,为true/false
//(引用 instanceof 类型)--->true/false
//如果结果是true,说明a引用指向堆中的对象是cat类型
Animal a3=new dog();
System.out.println(a3 instanceof cat); //在做向下转型的时候,要用instanceof
if (a3 instanceof cat){
cat c2=(cat) a3;
}
}
}
class Animal {
public void eat() {
System.out.println("好吃");
}
}
class cat extends Animal{
public void eat(){
System.out.println("猫吃鱼");
}
public void move(){
System.out.println("猫走猫步");
}
}
class dog extends Animal{
public void eat(){
System.out.println("狗啃骨头");
}
}