(2)前提:
A:有继承或者实现关系。
B:有方法的重写。
C:有父类(接口)的引用指向子类对象。
(3)多态中的成员使用特点:
Fu fz = new Zi();
多态时,所有表现形式都是父类的表现形式,
只有调用方法时,运行的是子类重写的方法
A:成员变量
编译看左边,运行看左边。
B:成员方法
编译看左边,运行看右边。
class Fu {
int num=1;
void show() {
System.out.println("showFu");
}
}
class Zi extends Fu {
int num=2;
void show() {
System.out.println("showZi");
}
}
class T {
public static void main(String[] args) {
Fu f=new Zi();
System.out.println(f.num);
f.show();
}
(4)多态中的转型:
A:向上转型
把子类对象赋值给父类(接口)的引用 自动类型提升 int a = 0; double b =a;
B:向下转型
把父类(接口)的引用强制转换成子类对象
double b = 10.0;
int a = (int)b;
Fu fz = new Zi();(前提)
Zi zf = (Zi)fz;
(5)多态的好处及弊端:
A:好处
提高了程序可维护性和可扩展性。
B:弊端
不能使用子类特有内容。
要想使用,要么向下转型,要么重新创建子类对象。
(6)多态的三种形式:
A:具体的类多态 父类 变量名 = new 子类();
public class Fu {
public void show(){
System.out.println("父类的show方法");
}
}
public class Zi extends Fu{
@Override
public void show(){
System.out.println("子类重写父类的show方法");
}
}
Fu fu= new Zi();
B:抽象类多态 父抽象类 变量名 = new 子类();
public abstract class Fu {
public abstract void method();
}
public class Zi extends Fu {
public void method(){
System.out.println(“重写父类抽象方法”);
}
}
//类的多态使用
Fu fu= new Zi();
C:接口多态 接口 变量名 = new 实现类();
public interface Fu {
public abstract void method();
}
public class Zi implements Fu {
public void method(){
System.out.println(“重写接口抽象方法”);
}
}