java 之多态

什么是多态?

一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

多态必须满足的条件:

  • 类和类之间必须要有继承关系
  • 子类必须重写父类中的方法
  • 父类的引用指向子类对象

多态中的成员访问特点:

  • 成员变量,编译的时候看父类中是否有(木有会报错),调用的时候也调用父类中的。
  • 成员方法,编译的时候看父类中是否有(木有会报错),调用的时候调用子类中重写好的方法
  • 静态方法,编译的时候看父类中是否有(木有会报错),调用的时候是一直调用父类中的方法

package com.company;


public class Welcome {
    public static void main(String[] args) {
        Father F = new Son(); //  父类引用指向子类对象
        F.eat();   //  调用子类中的 成员方法
        System.out.println(F.a);  // 调用的是父类中的成员变量
        F.run(); // 静态方法都是调用父类中的
        ((Son) F).game(); // 向下转型,才能调用子类中独有的玩游戏方法

    }
}

class Father {
    int a = 18;

    public void eat() {

        System.out.println("吃饭");


    }

    public static void run() {
        System.out.println("我是父类中的静态方法");
    }
}

class Son extends Father {
    int a = 20;

    public void eat() {
        super.eat(); // 调用父类的eat()方法,
        System.out.println("吃冰激凌");

    }
    public void game(){
        System.out.println("玩游戏");
    }

    public static void run() {
        System.out.println("我是子类中的静态方法");
    }

}


----------------------------
吃饭
吃冰激凌
18
我是父类中的静态方法
玩游戏

向上转型和向下转型

 父类引用指向子类对象,我们称这个过程为向上转型,属于自动类型转换。向上转型后的父类引用变量只能调用它编译类型的方法,不能调用它运行时类型的方法。这时,我们就需要进行类型的强制转换,我们称之为向下转型!。

多态的好处和弊端

  • 多态的主要优势是提高了代码的可扩展性,符合开闭原则。
  • 多态的弊端,就是无法调用子类特有的功能

猜你喜欢

转载自blog.csdn.net/weixin_44462792/article/details/86533562