java之多态问题详解

    技术2025-07-26  19

    多态概述:某一个事物,在不同时刻表现出不同的状态

    例如:猫可以是猫的类型 猫 m = new 猫(); 同时,猫也是动物的一种,也可以把猫成为动物 动物 d = new 猫();

    像这样new出的对象要从右边向左边读,例如 猫 m = new 猫();;猫是猫 动物 d = new 猫(); 读 猫是动物;

    多态的前提和体现 1.有继承关系 2.有方法重写 3.有父类引用指向子类对象 父 f = new 子();
    多态的成员访问特点(通过代码展示) A:成员变量 编译看左边,运行看左边 B:构造方法 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化 C:成员方法 编译看左边,访问看右边 D:静态方法 编译看左边,运行看左边 (静态和类相关,所以算不上重写,访问的还是左边)
    A:成员变量 编译看左边,运行看左边 class Fu{ public int num = 100; public void show() { System.out.println("Fu的方法"); } } class Zi extends Fu{ public int num = 1000; public int num2 = 50; public void show() { System.out.println("Zi类的方法"); } } public class test { public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num); //System.out.println(f.num2); 找不到符号 //f.num2 因为编译看左边 Fu f Fu类没有num2,所以提示找不到符号 } }

    运行结果:

    B:构造方法 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化
    C:成员方法 编译看左边,访问看右边 class Fu{ public int num = 100; public void show() { System.out.println("Fu的方法"); } } class Zi extends Fu{ public int num = 1000; public int num2 = 50; public void show() { System.out.println("Zi类重写Fu类的方法"); } public void mo() { System.out.println("Zi类自己的方法"); } } public class test { public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num); f.show(); //f.mo(); 找不到符号 /** 提示找不到符号是因为编译看左边,而左边Fu是没有mo方法的 所以找不到符号 **/ } }

    运行结果

    D:静态方法 编译看左边,运行看左边 (静态和类相关,所以算不上重写,访问的还是左边) class Fu{ public int num = 100; public void show() { System.out.println("Fu的方法"); } public static void fun() { System.out.println("Fu类的静态方法"); } } class Zi extends Fu{ public int num = 1000; public int num2 = 50; public void show() { System.out.println("Zi类重写Fu类的方法"); } public void mo() { System.out.println("Zi类自己的方法"); } public static void fun() { System.out.println("Zi类的静态方法"); } } public class test { public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num); f.show(); f.fun(); //f.mo(); 找不到符号 } }

    运行结果

    Processed: 0.011, SQL: 10