多态概述:某一个事物,在不同时刻表现出不同的状态
例如:猫可以是猫的类型 猫 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
);
}
}
运行结果:
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();
}
}
运行结果
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();
}
}
运行结果