父类与子类之间的转换分为向上转型和向下转型
向上变型:子类的小范围转换为父类的大范围;
相当于把子类当作父类,从而失去了其子类的新增属性;
写法:父类名 对象=new 子类名();
Animal animal2=new Cat();向下转型:
把父类的大范围转化为子类的小范围;
可以使用子类新增的内容;
写法
Animal animal2=new Cat();//向上转型 Cat cat=(Cat)animal2; cat.eat();
这样就可以调用Cat类新增的eat方法;
instanceof关键字:用来判断对象是否对应目标子类;
if(animal2 instanceof Cat) {
Cat cat=(Cat)animal2;
cat.eat();
}
全代码如下:
package world;
class Dog extends Animal{
@Override
public void run() {
System.out.println("狗狗跑");
}
public void keep() {
System.out.println("看家");
}
}
class Cat extends Animal{
@Override
public void run() {
System.out.println("猫猫跑");
}
public void eat() {
System.out.println("吃老鼠");
}
}
public class Animal {
String name;
int age;
public void run() {
System.out.println("动物跑");
}
}
package world;
public class Text {
public static void show(Animal b) {
b.run();
if(b instanceof Cat) {
Cat cat=(Cat)b;
cat.eat();
}
if(b instanceof Dog) {
Dog dog=(Dog)b;
dog.keep();
}
}
public static void main(String[] args) {
Animal animal1=new Animal();
Animal animal2=new Cat();//向上转型
Animal animal3=new Dog();
animal1.run();
animal2.run();
animal3.run();
System.out.println("...........");
show(animal1);
show(animal2);
show(animal3);
System.out.println("--------------");
if(animal2 instanceof Cat) {
Cat cat=(Cat)animal2;
cat.eat();
}
}
}



