Java中多态相关知识点

多态

1.多态概述

同一个对象在不同时刻表现出的不同形态

多态的前提和体现:

  • 有继承/实现关系
  • 有方法重写
  • 有父类引用指向子类对象(Animal a = new Cat();)

2.多态中的成员访问特点

  • 成员变量:编译看左边,执行看右边
  • 成员方法:编译看左边,执行也看左边

为什么成员变量和成员方法的访问不一样呢?

  • 因为成员方法有重写,而成员变量没有.

示例:

父类

package com.itheima_06;

public class Animal {
    public int age = 40;

    public void eat(){
        System.out.println("动物吃东西");
    }
}

子类

package com.itheima_06;

public class Cat extends Animal {
    public int age = 10;
    public int weight = 15;

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public void playGame(){
        System.out.println("猫捉迷藏");
    }
}

测试类

package com.itheima_06;

public class AnimalDemo {
    public static void main(String[] args) {
        //有父类引用指向子类对象
        Animal a = new Cat();

        System.out.println(a.age);
       // System.out.println(a.weight);         报错      成员变量编译和运行都看左边
        a.eat();            //多态中的成员方法,编译看左边,运行看右边
        //a.playGame();     报错
    }
}

3.多态的好处和弊端

多态的好处:提高了程序的扩展性

集体体现:定义方法的时候,使用父类型作为参数,将来在使用时,使用具体的子类型参与操作

多态的弊端:不能使用子类的特有功能

//动物操作类
public class AnimalOperator {
    /*
        public void useAnimal(Cat c){
            c.eat();
        }

        public void useAnimal(Dog d){
            d.eat();
        }

     */
    //传入的参数采用Animal就不用每次新建一个类就为他新定义一个方法
    public void useAnimal(Animal a) {
        //Animal a = new Cat();
        //Animal a = new Dog();
        a.eat();
    }
}
//测试类
public class AnimalDemo {
    public static void main(String[] args) {
        //创建动物操作类的对象,调用方法
        AnimalOperator animalOperator = new AnimalOperator();
        Cat c = new Cat();
        animalOperator.useAnimal(c);

        Dog d = new Dog();
        animalOperator.useAnimal(d);
    }
}

4.多态中的转型

  • 向上转型
  • 向下转型
public class AnimalDemo {
    public static void main(String[] args) {
        //向上转型
        Animal a = new Cat();
        a.eat();
        //不能调用子类的特有方法play()
        
        //向下转型
        Cat c = (Cat)a;
        //可以调用子类中的特有方法play了
        c.play();
    }
}
原文地址:https://www.cnblogs.com/icyhblog/p/14110603.html