欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java学习笔记——多态

程序员文章站 2024-03-21 19:28:58
...

多态:事物存在的多种形态。

Java中存在多态的前提条件:

  • 要有继承关系
  • 要有方法重写
  • 要有父类引用指向子类对象

多态中的成员访问特点:

  • 成员变量:编译看左边(父类),运行看左边(父类)
public class Main {

    public static void main(String[] args) {
        Son son1 = new Son(); //此时print出来num=20
        //父类引用指向子类对象
        Father son2 = new Son();//此时print出来num=10
        System.out.println(son1.num+","+son2.num);
    }
}

class Father{
    int num = 10;
}

class Son extends Father{
    int num = 20;
}

运行结果:

20,10
  • 成员方法:编译看左边(父类),运行看右边(子类)
public class Demo02 {

    public static void main(String[] args) {
        Daughter d = new Daughter();
        Mom d2 = new Daughter();
        d.hi();
        d2.hi();
    }
}

class Mom{
    int num = 10;

    public void hi(){
        System.out.println("hi Mom!");
    }
}

class Daughter extends Mom{
    int num = 20;

    public void hi(){
        System.out.println("hi Daughter!");
    }
}

运行结果:

hi Daughter!
hi Daughter!
  • 静态方法:编译看左边(父类),运行看左边(父类)
package lesson03;

public class Demo03 {

        public static void main(String[] args) {
            Daughter d = new Daughter();
            Mom d2 = new Daughter();
            d.hi();
            d2.hi();
        }
    }

    class Mom{
        int num = 10;

        public static void hi(){
            System.out.println("hi Mom!");
        }
    }

    class Daughter extends Mom{
        int num = 20;

        public static void hi(){
            System.out.println("hi Daughter!");
        }
    }

运行结果:

hi Daughter!
hi Mom!

总结:只有非静态的成员方法,编译看左边,运行看右边。

向上转型:子类对象赋值给父类对象;
向下转型:父类对象赋值给子类对象。