JAVA在类继承中类成员变量“重写”的问题

来源:互联网 发布:java基础入门 编辑:程序博客网 时间:2024/05/22 14:43

首先,重写是指子类对父类方法的重写,成员变量是不能重写,所以标题重写两字加了双引号。下面来演示一下“重写”变量的输出情况,以方便大家更好的理解重写的概念。

public class PropertyTest {      public static void main(String[] args)     {         ParentDef v1 = new ParentDef();         ParentDef v2 = new ChildDef();         ChildDef v3 = new ChildDef();         System.out.println("=====v1=====");         System.out.println("staticValue:" + v1.staticValue);         System.out.println("value:" + v1.value);         System.out.println("=====v2=====");         System.out.println("staticValue:" + v2.staticValue);         System.out.println("value:" + v2.value);         System.out.println("=====v3=====");         System.out.println("staticValue:" + v3.staticValue);         System.out.println("value:" + v3.value);     } } 

package com.luhy.test;public class ParentDef {public static final String staticValue = "父类静态变量";    public String value = "父类实例变量";    public void getT(){    System.out.println(1);    }}

package com.luhy.test;public class ChildDef extends ParentDef{public static final String staticValue = "子类静态变量";    public String value = "子类实例变量";    public void getT(){    System.out.println(2);    }}


结果输出:

=====v1=====staticValue:父类静态变量value:父类实例变量=====v2=====staticValue:父类静态变量value:父类实例变量=====v3=====staticValue:子类静态变量value:子类实例变量
        v1.getT();        v2.getT();        v3.getT();

结论

  对于调用父类成员变量还是子类成员变量,只与变量的声明类型有关系,与实例化的类型没有关系。而对于调用父类方法还是子类方法,只与变量的实例化的类型有关系,与声明的类型没有关系,当然是在方法被重写的情况下,如果没有重写,则调用的是父类的方法。