1 public class Test { 
 2     public static void main(String[] args) { 
 3         Parent p = new Son(); 
 4         p.show(); 
 5         System.out.println("a的值为:"+p.a); 
 6     } 
 7 } 
 8  
 9 class Parent { 
10     int a=10; 
11     public Parent() { 
12         System.out.println("父类无参构造,a的值为:"+a); 
13     } 
14     public void show() { 
15         System.out.println("父类方法"); 
16     } 
17 } 
18  
19 class Son extends Parent { 
20     int a=20; 
21     public Son() { 
22         System.out.println("子类无参构造,a的值为:"+a); 
23     } 
24     public void show() { 
25         System.out.println("子类方法"); 
26     } 
27 }

运行结果:

1 父类无参构造,a的值为:10 
2 子类无参构造,a的值为:20 
3 子类方法 
4 a的值为:10

【结论】

多态存在的三个必要条件 
一、要有继承; 
二、要有重写; 
三、父类引用指向子类对象。
-----------------------------------------------------------------------------------------------------
1)Parent p = new Son(); //多态必须符合右侧类(Son)包含于左侧类(Parent),例如 动物 d = new 猫(),猫是动物。

2)构造方法:创造子类对象时,一定会先访问父类构造方法,对父类数据进行初始化。

3)成员变量:通过多态调用的成员变量仍是父类的成员变量,因为成员变量不存在override(覆盖)问题。


4)成员方法:通过多态调用的成员方法一般仍是父类中的方法,若在相应子类中被override(覆盖),则调用子类重写的方法。

5)静态方法:通过多态调用的静态方法仍是父类的静态方法,因为静态方法虽然能被子类的静态方法“重写”,但严格来讲算不上是override(覆盖)。

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java的方法和对象的栈内存及堆内存的区分知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。