创建一个 Cat 类 Dog 类 Person类 Animal类 在测试
//猫是一种动物 -->继承关系
//可以吧猫当成动物来看
public class Cat extends Animal{
public void eat() {
System.out.println(“猫吃鱼”);
}
public void catchMouse() {
System.out.println(“猫喜欢抓老鼠”);
}
}
public class Dog extends Animal{
public void eat() {
System.out.println(“狗吃骨头”);
}
}
public class Person {
//注释部分为没有把Cat类 Dog类在Person下继承的效果
// public void feeCat(Cat c) {
// c.eat();
// }
// public void feeDog(Dog s) {
// s.eat();
// }
public void fees(Animal ani) {//接受到的所以有动物都是动物(Animal)
ani.eat();
}
}
//动物类
public class Animal {
public void eat() {
System.out.println(“动物再吃”);
}
}
public class Testa {
public static void main(String[] args) {
// TODO Auto-generated method stub
//以下注释部分为没有把Cat类 Dog类在Person下继承的效果
// Cat c = new Cat();
// Dog s = new Dog();
// Person p = new Person();
// p.feeCat©;
// p.feeDog(s);
//Cat c = new Cat();//创建一只猫
//向上转型 只把猫看成了动物没说动物会抓老鼠 缺点会屏蔽子类中特有的方法
Animal ani = new Cat();//父类 可以吧猫当成动物来看 , 把子类对象赋值给父类引用(变量) 向上转型
Animal ani2 = new Dog();
//ani.catchMouse();//会报错 因为站在动物的角度不能抓老鼠 这里在最后进行测试
//多态 把不同数据类型进行统一
//第一次进行测试测试的向上转型 然后注释运行下面的
// Person p = new Person();
// p.fees(ani);
// p.fees(ani2);
//向下转型
Cat cc = (Cat)ani;
cc.catchMouse();//猫可以抓老鼠了
}
}
小结## 标题
每加一个猫 狗 大象 Person 都要在Person 中添加一个人方法
把他们都看成动物
猫 狗 都不是同一个物种
多态
同一个对象拥有多种形态 让程序有超强的可扩展性
作用
把不同的数据类型进行统一
小知识点
1 把子类的对象赋值给父类 的变量 ——>向上转型
缺点 会屏蔽掉子类中特有的方法
2 把父类的变量转化为子类的变量——>向下转型
把猫看成动物必然的 把动物再看成为猫不一定所以:
向下转型会有风险 java要求必须写强制类型转换
(转换之后的数据类型)变量