概念:
同一个对象,在不同时刻体现出不同的状态
举例:
猫是猫。猫是动物
Animal cat1 = new Cat();
多态前提:
- 要有继承关系
- 要有方法重写(多态的体现)
- 要有父类引用指向子类 Animal cat1 = new Cat();
多态优缺点处
- 提高代码维护性
- 提高了代码的扩展性
- 不能访问子类特有功能
如果想要使用子类特有功能:
Animal cat4 = new Cat();
Cat cat5 = (Cat) cat4;
cat5.show3(); //访问子类特有功能
cat5.show1();//访问子类静态方法
cat4.show1();//访问父类静态方法
多态中成员访问特点:
Animal cat1 = new Cat();
Animal 为左边; Cat()为右边
- 成员变量:编译运行看左边
- 构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化
- 成员方法:编译看左边,运行看右边(方法重写)
- 静态方法:编译运行看左边 (静态方法和类相关,不算方法重写,所以运行也会显示父类方法)
举例:
//父类
public class Animal {
String a = "动物的成员变量";
public void show(){
System.out.println("父类的show");
}
public static void show1(){
System.out.println("父类的静态show");
}
}
//子类:
public class Cat extends Animal{
String a = "猫的成员变量";
public void show(){
System.out.println("子类的show");
}
public static void show1(){
System.out.println("子类的静态show");
}
}
//测试:
public class ExtendsDemo4 {
public static void main(String[] args) {
//多态访问成员方法:
Animal cat3 = new Cat();
System.out.println(cat3.a);//编译使用的是动物(父类)的show,运行结果显示是动物(父类)的show
cat3.show(); //编译使用的是动物(父类)的show,但运行结果显示是猫(子类)的show
cat3.show1(); //访问静态方法
}
}
//显示:
动物的成员变量
子类的show
父类的静态show