多态-Java

格式和使用

  • 父类引用指向子类对象

    父类名称 对象名 = new 子类名称();

    接口名称 对象名 = new 实现类名称();

  • 访问成员变量的方式

    直接通过对象名称访问成员变量,优先等号左边,没有就向上找

    间接通过成员方法访问:(子类不重写时)同理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public  class Fu {
int num = 20;
public void method() {
System.out.println("子类方法");
}
}
public class Zi extends Fu {
int num = 10;
public void method() {
System.out.println("子类方法");
}
public void methodA() {
System.out.println("子类方法A");
}
}
public static void main(String[] args) {
Fu obj = new Zi();
obj.method();
//obj.methodA();不能访问子类特有方法
System.out.println(obj.num);
}

运行结果

1
2
子类方法
20

对象的向上转型

  • 父类名称 对象名 = new 子类名称();

对象的向下转型

  • 子类名称 对象名 = (子类名称 ) 父类对象;
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
giveMeAPet(new Zi());
}
public static void giveMeAPet(Fu fu){
if(fu instanceof Zi){
Zi zi = (Zi)fu;
zi.Mymethod();
}
if(fu instanceof ZiA){
ZiA ziA=new ZiA();
ziA.methodA();
}
}