Akshit Gupta Ответов: 3

Проблема статического ключевого слова Java


Я прочитал это в посте, что статические переменные не наследуются в Java.. Я написал код, чтобы проверить то же самое, но я не понимаю, почему он наследуется.. Вот этот код..

class B{
    static String name = "ABCD";
}

class Abc {
    public static void main(String args[] ) throws Exception{
        C c = new C();
        c.disp();
    }
}

class C extends B{
    void disp(){
        System.out.println(name); // Inheriting name from B
    }
}


Код печатает "ABCD" на консоли.. Пожалуйста, скажите мне, что я здесь упускаю..

Заранее Спасибо..!

Что я уже пробовал:

Я пытаюсь проверить, могут ли статические переменные быть унаследованы или нет..

3 Ответов

Рейтинг:
20

OriginalGriff

Статические переменные в Java не наследуются, потому что они являются частью реализации класса, а не реализации экземпляра класса-они не являются членами экземпляра класса.

Это означает, что "нормальная" переменная является частью экземпляра класса: thisOne содержит другую "копию" нестатического varianle myVar, которая thatOne - thisOne.myVar не содержит того же числа, что и thatOne.myVar.

Но static переменные одинаковы для всех экземпляров, потому что они не являются частью экземпляра, есть одно выделенное пространство, и на него ссылаются все экземпляры (или даже без экземпляра вообще).

А унаследованные элементы могут быть переопределены, скрыты или заменены.

Это означает, что статические члены не могут быть унаследованы: потому что унаследованная версия потенциально должна быть другой для вашего класса C, чем для класса A, и это не может произойти.


Akshit Gupta

- Спасибо, сэр.. Это решило мою проблему..

Рейтинг:
1

Thomas Daniels

Статические переменные в Java не наследуются, они существуют только в классе, который их объявляет; однако они могут быть доступны неявно, ссылаясь на экземпляр или подкласс (или экземпляр подкласса) класса, который определяет статическую переменную.

Так, name существует только в B, но вы также можете получить к нему доступ с помощью C.name (Итак, из кода в C класс, просто name хватить).


Akshit Gupta

Спасибо, сэр, что вернулись.. Но как отличить, наследуется ли переменная или вызывается статически?. Я имею в виду, что мы называем унаследованные переменные одинаково.. Если я не ошибаюсь

Thomas Daniels

Как сказал OriginalGriff в своем ответе:

- А унаследованные члены могут быть переопределены, скрыты или заменены."

Это заметное отличие: вы не можете сделать это для переменной 'name'.

Рейтинг:
0

Sahi Repswal

Static method in Java is a method which belongs to the class and not to the object. A static method can access only static data.

    It is a method which belongs to the class and not to the object(instance)
    A static method can access only static data. It can not access non-static data (instance variables)
    A static method can call only other static methods and can not call a non-static method from it.
    A static method can be accessed directly by the class name and doesn’t need any object
    A static method cannot refer to "this" or "super" keywords in anyway


CHill60

Если вы копируете материал со страницы, найденной с помощью поиска google, вы должны доверять своему источнику, иначе вас обвинят в плагиате.