面向对象-多态-1
面向对象-多态-1


public class Animal {
public int age=40;
public void eat(){
System.out.println("动物吃东西.");
}
}
//---------------
public class Cat extends Animal {
public int age=20;
public int weight=10;
@Override
public void eat(){
System.out.println("猫吃鱼.");
}
public void playGame() {
System.out.println("猫捉迷藏.");
}
}
//-----------------
//多态中成员的访问特点
public class CatDemo {
public static void main(String[] args) {
//父类引用指向子类对象
Animal animal = new Cat();
//多态的形式访问成员变量, 编译要看左边. !@#$
//运行也要看左边. 也就是父类那边. !@#$
System.out.println(animal.age);
//不能访问子类的成员变量,
// System.out.println(animal.weight);(报错)
/* 多态的形式访问成员方法, 编译看左边. !@#$
运行看右边.
(也就是子类和父类都要有这个方法,
运行的是这个子类中方法的重写.) */
animal.eat();
//animal.playGame();(报错)
}
}
1.3 多态的好处和弊端
- 多态的好处: 提高了程序的扩展性.
具体体现: 定义方法的时候, 使用父类型作为参数, 将来在使用的时候, 使用具体的子类型参与操作. - 多态的弊端: 不能使用子类的特有功能.
//父类 动物
public class Animal {
// public int age=40;
public void eat(){
System.out.println("动物吃东西.");
}
}
//---------------
//子类 狗
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃骨头.");
}
}
//--------------
//子类 猫
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("猫吃鱼.");
}
}
//-------------
//操作类
public class AnimalOperator {
/* public void useAnimal(Cat cat){
cat.eat();
}
public void useAnimal(Dog dog){
dog.eat();
}*///用多态形式传参就不用写多个方法了!@@@
public void useAnimal(Animal a) {
/*多态的好处是提高程序的扩展性,
在定义方法的时候使用父类型作为参数,
使用的时候使用子类型进行操作.
形参写父类的对象,调用方法时可以传它所有子类
对象,只要父类引用和子类对象都有这个方法(重写)@@@
测试类中的 Cat c = new Cat(); 造猫对象
就相当于 Animal a = new Cat();
测试类中的 Dog d = new Dog(); 造狗对象
就相当于 Animal a = new Dog();
*/
a.eat();
}
}
//---------------
//测试类
public class AnimalDemo {
public static void main(String[] args) {
//创建动物操作类的对象,调用方法
AnimalOperator ao = new AnimalOperator();
Cat c = new Cat(); //造猫对象
Dog d = new Dog(); //造狗对象
/*调用操作类的方法
c,d都是Animal的子类,都可以传入.
*/
ao.useAnimal(c);
ao.useAnimal(d);
}
}
猫吃鱼.
狗吃骨头.

浙公网安备 33010602011771号