Are static variables inherited
Asked Answered
A

4

15

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?

Adamandeve answered 14/5, 2016 at 11:47 Comment(2)
Can you give any of the "1000's of locations"Fitzsimmons
@Hackerdarshi --> google.co.in/…Adamandeve
E
11

Please have a look into the documentation of oracle: http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e12110

Static variables are inherited as long as they're are not hidden by another static variable with the same identifier.

Estaminet answered 14/5, 2016 at 11:59 Comment(1)
Thanks for the answer. 1 line compiles it all "Static variables are inherited as long as their are not hidden by another static variable with the same identifier."Adamandeve
L
39

"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.

Leveller answered 14/5, 2016 at 11:54 Comment(1)
In the example given how do we access it using the fully qualified parent name?Abell
E
11

Please have a look into the documentation of oracle: http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e12110

Static variables are inherited as long as they're are not hidden by another static variable with the same identifier.

Estaminet answered 14/5, 2016 at 11:59 Comment(1)
Thanks for the answer. 1 line compiles it all "Static variables are inherited as long as their are not hidden by another static variable with the same identifier."Adamandeve
G
3

This is not exactly inheritance, its more like sharing having access to the static attribute of the class you are extending unless you are hiding it by declaring the same identifier in you subclass, note that in case of instance attribute if you change the value of the inherited attribute it will be changed in the super instance which was instantiated for your object but if there is another hierarchy which will be supposedly blind to your hierarchy it will not be affected.

In the case of static the parent attribute will be changed and any other hierarchy will take this effect too.

Grapher answered 14/5, 2016 at 12:32 Comment(0)
L
0

inheritance is between parent class object and child class object (not class but objects) . class is not an actual thing but template(structire only) and when you create a child class the teplate is just enlarged also having old structute(here, static method)

Liz answered 17/10, 2021 at 4:24 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Hayrack

© 2022 - 2024 — McMap. All rights reserved.