实现多态的前提
1。 要有继承
2。 要有方法重写,没有也可以,但是没有的话 就没有意义
3。
要有父类引用 指向子类对象 如: 父类 f=new 子类();
* 多态中的成员访问特点
* A, 成员变量 编译看左边, 运行看左边
* B, 构造方法 创建子类对象的时候,,访问 父类的构造方法, 对父类的数据进行初始化
* c.成员方法 编译看左边 ,运行看右边
* d. 静态方法 编译看左边 , 运行看左边 (静态和类相关,算不上重写,所以访问还是左边)
1,向上造型
优点: 合理运用向上造型 ,能够减少代码量,优化代码.总结如下:
弊端: 使用向上造型,会使子类中特有的方法丢失
类型提升,自动类型转换
基本类型自动类型转换
byte → short → int → long → float → double
↑
char
引用类型自动类型转换(向上造型)
小类型 → 自动转换 → 大类型 //父类引用调用子类对象
exp Dog dog=new Dog(); Animal animal=dog;
等价于
Animal animal=new Dog();
package test01;
import org.omg.CORBA.PUBLIC_MEMBER;
public class Test01 {
public static void main(String[] args){
//----------------使用向上造型-------------
Test01 test=new Test01();
test.display(new LcdDisplayer ());
test.display(new HwDisplayer());
//---------------不使用向上造型----------------------
test.display(new LcdDisplayer());
test.display(new HwDisplayer());
}
//--------------向上造型,相同的方法只写一遍,简化了代码量----------------
public void display(Displayer dis){
dis.displayText();
dis.displayGraph();
}
//--------------不使用向上造型,相同的方法要重复写--------------------
public void display(LcdDisplayer dis){
dis.displayText();
dis.displayGraph();
}
public void display(HwDisplayer dis){
dis.displayText();
dis.displayGraph();
}
}
//-----------------------------------
class Displayer{//显示器 父类
public void displayText(){
System.out.println("显示文字");
}
public void displayGraph(){
System.out.println("显示图片");
}
}
//----------------------------------------
class LcdDisplayer extends Displayer{//子类.继承父类
public void displayText(){
System.out.println("LCD显示文字");
}
public void displayGraph(){
System.out.println("LCD显示图片");
}
public void other(){
System.out.println("子类B1方法");
}
}
//--------------------------------------------
class HwDisplayer extends Displayer {//子类,继承父类
public void displayText(){
System.out.println("HW显示文字");
}
public void displayGraph(){
System.out.println("HW显示图片");
}
}