首先定义一个类动物类
package ploy;
//定义一个动物测试类
public class TestAnimal {
public static void main(String[] args) {
// 多态形式 父类引用指向子类对象
Animal animal = new Cat();
//调用eat()方法 备注:当你在使用多态的时候,程序会首先检查父类中是否含有该方法,
//如果没有,择编译错误; 如果有,执行的是子类重写之后的方法。
animal.eat();
Animal animal2 = new Dog();
//调用eat()方法
animal2.eat();
//调用eat()方法
//Cat cat = new Cat();
//Dog dog = new Dog();
showCatEat(new Cat());//Animal animal = new Dog(); dog
/* //查看猫吃的东西
showCatEat(cat);*/
/* //查看狗吃的东西
showDogEat(dog);*/
}
//查看猫具体吃什么东西
public static void showCatEat(Cat cat){
cat.eat();
}
//查看狗具体吃什么东西
public static void showDogEat(Dog dog){
dog.eat();
}
/*
以上两个方法,可以简化一下
*/
//查看动物他吃什么
public static void showAnimalEat(Animal animal){
animal.eat();
}
}
狗的类:
package ploy;
//定义一个字类
public class Dog extends Animal{
//子类重写父类中的eat()方法
@Override
public void eat() {
System.out.println("看骨头");
}
//看家
public void lookHome(){
}
}
猫的类:
package ploy;
//定义一个子类
public class Cat extends Animal{
//子类重写父类中的eat()方法
@Override
public void eat() {
System.out.println("吃鱼");
}
//抓老鼠
public void catchMouse(){
System.out.println("抓老鼠");
}
}
测试类:
package ploy;
//定义一个动物测试类
public class TestAnimal02 {
public static void main(String[] args){
//多态的形式 父类引用指向子类对象
//向上转型
Animal animal = new Dog();
//猫抓老鼠的功能
animal.eat();
//狗看家的功能
//添加校验instanceof 变量名 instanceof 数据类型
if (animal instanceof Dog){
//表明他是Dog类型
Dog dog = (Dog) animal;
dog.lookHome();
}
if (animal instanceof Cat){
//向下转型 子类类型 变量名 = (子类类型) 父类变量名
Cat cat = (Cat) animal;
cat.catchMouse();
}
// java.lang.ClassCastException: 类型转换异常 两个没有任何关联的类是不能转换的
// 两个类是一种父子类关系,可以实现转换
}
}
