1)父类:
public class Animal {
public void eat(){
System.out.println("动物具有吃的能力");
}
}
2)子类1继承父类
public class Dog extends Animal {
public void eat(){
System.out.print("狗是吃肉的");
}
public void watchDoor(){
System.out.println("狗具有看门的能力");
}
}
3)子类2继承父类
public class Cat extends Animal {
}
4)main函数
public class Inital {
public static void main(String[] args) {
Animal obj1=new Animal();//父类引用指向本类对象
Animal obj2=new Dog();
Animal obj3=new Cat();//父类的引用是可以指向子类对象的
//Dog obj3=new Animal();//错,子类引用不能指向父类对象
obj1.eat();
obj2.eat();
obj3.eat();
obj2.watchdoor();//错,父类不能继承子类没有引用父类的方法
}
}
二、用instanceof测试可否进行类型转换
依然是上面的例子(代码有部分增加)
public class Inital {
public static void main(String[] args) {
Animal obj1 = new Animal();//父类引用指向本类对象
Animal obj2 = new Dog();
Animal obj3 = new Cat();//父类的引用是可以指向子类对象的
//Dog obj3=new Animal();//错,子类引用不能指向父类对象
obj1.eat();
obj2.eat();
obj3.eat();
//obj2.watchdoor();//错,父类不能继承子类没有引用父类的方法
Dog dog = new Dog();
Animal animal = dog;//自动类型提升 向上类型转换
if(animal instanceof Dog){
Dog dog2 = (Dog) animal;//向下类型转换 强制类型转换 (存在风险)
}else{
System.out.println("无法进行类型转换,转换成Dog类型");
}
//Cat cat =(Cat)animal;//报错,类型不匹配。1.编译时按照Cat类型编译;in;2.运行时Dog类型;
// 但是用instanceof语句可以避免这个问题)
if (animal instanceof Cat) { //如果对象有Cat元素,可以转换,否则不能转换
Cat cat = (Cat) animal;
} else {
System.out.println("无法进行类型转换,转换成Cat类型"); //如果返回boolean类型为假
}
}
}
运行结果为: