Java多态之编译看左,运行看左/右
Java中多态的前提:
A:有继承关系
B:有方法重写(不是必须)
C:有父类引用指向子类对象
多态中成员的访问特点:
A:成员变量:编译看左边,执行看左边。
B:成员方法:编译看左边,执行看右边。
多态的好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作。
多态的弊端:不能使用子类的特有功能
向上转型:
从子到父
父类引用指向子类对象
向下转型:
从父到子
父类引用转为子类对象
代码(父类/子类/实现类/Console:):
package com.test;
public class Person {
// private String name;
public String name = "PersonName";// 测试,暂且改为public
// private int age;
public int age = 20; // 测试,暂且改为public
public void eat() {
System.out.println("父类方法:人都要吃饭");
}
public void sleep() {
System.out.println("父类方法:人都要睡觉");
}
//get/set方法等。。。
}
package com.test;
public class Student extends Person {
// private String name;
public String name = "StudentName";// 测试,暂且改为public
// private int age;
public int age = 18; // 测试,暂且改为public
public int studentNum = 001;
@Override // 子类重写父类eat方法
public void eat() {
System.out.println("子类重写方法:学生要吃饭");
}
@Override // 子类重写父类sleep方法
public void sleep() {
System.out.println("子类重写方法:学生都要睡觉");
}
public void study() {
System.out.println("子类独有方法:学生要学习");
}
// get/set方法等。。。
}
package com.test;
public class TestDemo {
public static void main(String[] args) {
// 多态中成员的访问特点:
// A:成员变量:编译看左边,执行看左边。
// B:成员方法:编译看左边,执行看右边。
// 多态,向上转型:
Person p = new Student();
// 编译看左边:
// p.studentNum //访问子类独有成员变量报错,编译不通过
// p.study(); //访问子类独有成员方法报错,编译不通过
// 成员变量:运行看左边
System.out.println(p.name); // PersonName
System.out.println(p.age);// 20
// 成员方法:运行看右边
p.eat();// 子类重写方法:学生要吃饭
p.sleep();// 子类重写方法:学生都要睡觉
}
}
Console:
PersonName
20
子类重写方法:学生要吃饭
子类重写方法:学生都要睡觉
相关资料:
欢迎大家交流指正,讨论完善!