java 基础 --多态--009

1, 多态:同一个对象(事物),在不同时刻体现出来的不同状态

2, 多态的前提:
       A:  要有继承关系
       B:  要有方法的重写
       C:  要有父类引用指向子类对象   父 f = new 子();

3, 多态访问特点:
A: 成员变量
编译看左边,运行看左边
B: 构造方法
创建子类的时候,访问父类的构造方法,对父类数据初始化
C: 成员方法
编译看左边,运行看右边
D: 静态方法
编译看左边,运行看左边
(静态和类相关,算不上重写,所以还是左边)
总结:优于成员方法存在方法重写,所以他看右边
4, 父不能访问子类特有的方法,问题?怎么才能使用子类特有的方法呢?
把父类的引用强制转换为子类的引用(向下转型)


对象间转型问题:
向上转型 : Fu f = new Zi();
乡下转型 : Zi z = (Zi) f;//要求f 必须能转为Zi的

举例:
class Fu{ int x = 10; public void method(){ System.out.println("fu"); }
public static void function(){
System.out.println("function fu");
} }
class Zi extends Fu{ int x = 100; int y = 10; public void method(){ System.out.println("zi"); } public void method2(){ System.out.println("zi2"); }
public static void function(){
System.out.println("function zi");
} }
class DuoTaiTest{ public static void main(String[] args){ Fu f = new Zi(); System.out.println(f.x); // 打印 10(看父类) System.out.println(f.y); // 编译报错 f.method1(); // 打印“zi” f.method2();// 编译报错,怎么才能不报错呢?
Zi z = (Zi)f;
z.method2()// haha,OK la

f.function();// function fu

Zi z = (Zi)f; } }


原文地址:https://www.cnblogs.com/ysloong/p/6411783.html