java之继承中的静态变量

package Test;

/**
 * Created by wangbin10 on 2018/7/9.
 * 我们知道静态变量属于类级别变量,对应每个类只有一份,类的所有实例共有一份,而成员变量则分别属于每个对象;
 * 那么在类的继承中,父类的静态变量和成员变量,子类都会继承,继承的原则是什么?通过下面的测试,我们的结论是:
 * 1.不仅类的对象共享类的静态变量,父类的所有子类对象也都共享父类的静态变量,有且仅有一份,对其进行修改,会影响到所有类及对象;
 * 2.子类复制父类的成员变量,每个子类持有一份,互不影响。
 */
public class Parent {
    public static String STATIC_VAR = "parent";
    public String MEMBER_VAR = "member";

    public static void main(String[] args) {
        Child1 c1 = new Child1();
        Child2 c2 = new Child2();
        c1.setVar("child1");
        System.err.println(c1.getVar());
        System.err.println(c2.getVar());//输出:child1,说明子类共享父类的静态变量

        c1.setMember("mem change");
        System.err.println(c1.getMember());
        System.err.println(c2.getMember());//输出:member,说明子类分别复制并持有一份父类的成员变量,互不影响
    }
}

class Child1 extends Parent {
    void setVar(String var) {
        STATIC_VAR = var;
    }

    String getVar() {
        return STATIC_VAR;
    }

    void setMember(String mem) {
        MEMBER_VAR = mem;
    }

    String getMember() {
        return MEMBER_VAR;
    }
}

class Child2 extends Parent {
    String getVar() {
        return STATIC_VAR;
    }

    String getMember() {
        return MEMBER_VAR;
    }
}

 

posted @ 2018-07-09 11:10  Mars.wang  阅读(3248)  评论(0编辑  收藏  举报