Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
247 views
in Technique[技术] by (71.8m points)

java - Are static variables inherited

I have read at 1000's of locations that Static variables are not inherited. But then how this code works fine?

Parent.java

public class Parent {
        static String str = "Parent";
    }

Child.java

public class Child extends Parent {
        public static void main(String [] args)
        {
            System.out.println(Child.str);
        }
    }

This code prints "Parent".

Also read at few locations concept of data hiding.

Parent.java

public class Parent {
    static String str = "Parent";
}

Child.java

public class Child extends Parent {
    static String str = "Child";

    public static void main(String [] args)
    {
        System.out.println(Child.str);
    }
}

Now the output is "Child".

So does this mean that static variables are inherited but they follow the concept of data-hiding?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

"Inherited" is not an ideal description of what is happening; a better way to describe it would be to say that static variables are shared among the subclasses of the base class.

All derived classes obtain access to static variables of their base classes. This includes protected variables, mirroring the situation with variables that are inherited.

The concept of hiding applies as well: when a class-specific variable str appears in the Child class, it hides the str variable of the parent class.

Note that the variable str of the base class does not become inaccessible: Child can still access it by fully qualifying with the name of Parent class.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...