面向对象-多态-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);
    }
}

猫吃鱼.
狗吃骨头.

posted @ 2023-01-26 11:18  大宝贝94106  阅读(23)  评论(0)    收藏  举报