概述:
事物的多种表现形态就是多态;同一对象在不同情况下表现出不同的状态或行为。
比如:人一个事物,在公司是员工,回到家是父母的儿子,在妻子面前是丈夫等不同的场景下,就有不同的身份 这多态的体现。
java中的多态体现在类上,具体的体现由对象来实现。
java中的多态就理解为对象的不同数据类型的体现,在java中自己类型的体现不属于多态,父类类型的体现就是多态的体现
子类对象充当父类类型的变量
前提:
- 必须要有继承或实现关系
- 方法重写
- 父类引用指向子类对象(is a 关系)
特点:
父类引用指向子类的对象
【把子类对象的地址值存放到父类类型的变量中】
格式:
父类类型 变量名 = new 子类名(实参);
代码示例
父类:
public class Father {
String name;
int age;
public void work() {
System.out.println("我是父类中的work方法");
}
}
子类:
public class Son extends Father{
String name; //姓名
int age; //年龄
int height; //身高
@Override
public void work() {
System.out.println("我是子类的work方法");
}
}
测试类:
public class Test {
public static void main(String[] args) {
//通过多态的方式创建对象
Father fa = new Son(); //父类引用指向子类对象
}
}
多态中成员变量的访问原则
编译看左,运行看左
左右指的是创建对象的时候赋值符号的左右 左边【父类】 右边【子类】
编译看左(左边指父类):意思是在编译期间会看左边的类型有没有这个成员,没有就报错,有就不报错。
运行看左(左边指父类):意思是在运行期间使用的是 左边的类型中的这个成员
代码示例
父类:
public class Father {
String name = "父亲";
int age = 32;
}
子类:
public class Son extends Father{
String name = "儿子"; //姓名
int age = 5; //年龄
int height = 150; //身高
}
测试类:
public class Test {
public static void main(String[] args)