/*
多态:同一个对象(事物),在不同时刻体现出来的不同状态
多态的前提:
A:要有继承关系
B:要有方法重写
C:要有父类引用指向子类对象
父 f = new 子();
用代码体现一下多态:
多态中的成员访问特点:
A:成员变量:
编译看左边,运行看左边
B:构造方法:
创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
C:成员方法:
编译看左边,运行看右边。(因为方法存在复写/覆盖,父类方法被子类盖掉了)
D:静态方法:
编译看左边,运行看左边
(静态和类相关,算不上重写,所以访问的是左边的)
*/
==========================构造方法 验证=========================
class Person{
public Person(){ System.out.println("父类构造方法"); } public void show(){ System.out.println("父类方法"); } } class Student extends Person{ public Student(){ System.out.println("子类构造方法"); } public void show(){ System.out.println("子类方法"); } } class Test{ public static void main(String [] args){ Person p =new Student(); } } 结果:
父类构造方法
子类构造方法
=========================成员变量 验证一============================
class Person{
int number = 100; public Person(){ System.out.println("父类构造方法"); } public void show(){ System.out.println("父类方法"); } } class Student extends Person{ int number = 1000; int number2 = 200; public Student(){ System.out.println("子类构造方法"); } public void show(){ System.out.println("子类方法"); } } class Test{ public static void main(String [] args){ Person p =new Student(); System.out.println(p.number); System.out.println(p.number2); } } 结果:
编译报错:
Test.java:24: 找不到符号
符号: 变量 number2 位置: 类 Person System.out.println(p.number2); ===============================成员方法 验证二=======================
class Person{
int number = 100; public Person(){ System.out.println("父类构造方法"); } public void show(){ System.out.println("父类方法"); } } class Student extends Person{ int number = 1000; int number2 = 200; public Student(){ System.out.println("子类构造方法"); } public void show(){ System.out.println("子类方法"); } } class Test{ public static void main(String [] args){ Person p =new Student(); System.out.println(p.number); } } 结果:
父类构造方法
子类构造方法 100 =========================成员方法 验证===========================
class Person{
int number = 100; public Person(){ System.out.println("父类构造方法"); } public void show(){ System.out.println("父类方法"); } } class Student extends Person{ int number = 1000; int number2 = 200; public Student(){ System.out.println("子类构造方法"); } public void show(){ System.out.println("子类方法"); } public void method(){ System.out.println("子类method方法"); } } class Test{ public static void main(String [] args){ Person p =new Student(); p.show(); p.method(); } } 结果:
编译出错
Test.java:27: 找不到符号
符号: 方法 method() 位置: 类 Person p.method(); ============================成员方法 验证二==========================
class Person{
int number = 100; public Person(){ System.out.println("父类构造方法"); } public void show(){ System.out.println("父类方法"); } } class Student extends Person{ int number = 1000; int number2 = 200; public Student(){ System.out.println("子类构造方法"); } public void show(){ System.out.println("子类方法"); } public void method(){ System.out.println("子类method方法"); } } class Test{ public static void main(String [] args){ Person p =new Student(); p.show(); } } 结果:
父类构造方法
子类构造方法 子类方法 |
|