标签:转型 对象 实例 父类 自己的 运行时 out 向上转型 变量
一个类的多种形式
多态就是同一方法作用的对象不同而出现不同的行为方式。
人话:完成一件事,由不同的人去解决,会有不同的解决方法。(哈姆雷特?)
编译时多态:通过 overloading(重载) 实现
运行时多态:通过 overriding(重写) 和 继承实现
实例:
package com.wnaoii.oop.Demo06;
//父类
public class Person {
public int age = 0;
public void run() {
System.out.println("run");
}
}
和父类有继承关系的Student类:
package com.wnaoii.oop.Demo06;
// 子类
public class Student extends Person {
public int age = 19;
// 重写父类的 run() 方法
@Override
public void run() {
System.out.println("子类run()方法被调用!");
}
// 子类特有的方法
public void eat() {
System.out.println("子类特有eat()方法被调用!");
}
}
调用:
package com.wnaoii.oop;
import com.wnaoii.oop.Demo06.Person;
import com.wnaoii.oop.Demo06.Student;
public class Application {
public static void main(String[] args) {
Student s1 = new Student();
// 父类的引用指向子类的对象(向上转型)
Person s2 = new Student();
// 多态成员方法调用
s1.run(); // 能调用自己的和继承的方法
s1.eat(); // 类型是 Student 正常调用
System.out.println();
s2.run(); // 子类重写了父类的方法,所以优先执行子类的方法
// s2.eat(); s2的类型为 Person ,而Person中没有eat()方法,无法调用
System.out.println();
// 多态成员变量调用
System.out.println(s1.age);
System.out.println(s2.age);
}
}
结果:
子类run()方法被调用!
子类特有eat()方法被调用!
子类run()方法被调用!
19
0
由此可以看出多态成员访问的特点:
成员变量:编译看父类(左边),运行看父类(左边)
成员方法:编译看父类(左边),运行看子类(右边)
标签:转型 对象 实例 父类 自己的 运行时 out 向上转型 变量
原文地址:https://www.cnblogs.com/WNAOII/p/14752226.html