多态概述
概述:事物存在的多种形态
前提:
- 要有继承关系
- 要有方法重写
- 要有父类引用指向子类对象
class Demo_Polymorphic{
public static void main(String[] args){
Cat c=new Cat();
c.eat();
Animal a=new Cat(); //父类引用指向子类对象
a.eat();
}
}
class Animal{
public void eat(){
System.out.println("动物吃鱼");
}
}
class Cat extends Animad{
public void eat(){
System.out.println("猫吃鱼");
}
}
多态中的成员访问
- 成员变量编译看左边运行看左边
class Demo2_Polymorphic{
public static void main(){
Father f=new son(); //成员变量编译和运行都看左边Father类
System.out.println(f.num);
}
}
class Father{
int num=10;
}
class Son extends Father{
int num=20;
}
- 成员方法编译看左边,运行看右边
class Demo2_Polymorphic{
public static void main(){
Father f=new son(); //成员方法编译看左边运行看右边son类(动态绑定)
f.print();
}
}
class Father{
int num=10;
public void print(){
System.out.println("father");
}
}
class Son extends Father{
int num=20;
pulic void print(){
System.out.println("son");
}
}
- 静态成员方法编译看左边,运行看左边
class Demo2_Polymorphic{
public static void main(){
Father f=new son(); //成员方法编译看左边运行看右边son类(动态绑定)
f.method(); //静态调用相当于father.method();
}
}
class Father{
int num=10;
public void print(){
System.out.println("father");
}
public static void method(){
System.out.println("father static method");
}
}
class Son extends Father{
int num=20;
pulic void print(){
System.out.println("son");
}
public static void method(){
System.out.println("son static method");
}
}
多态的好处和弊端
好处
- 提高代码的维护性,由继承保证
- 提高代码的扩展性,由多态保证
弊端
- 不能使用子类的特有属性和行为