Эта переменная переопределяет - PullRequest
0 голосов
/ 04 мая 2020
        /*package whatever //do not write package name here */
        //package inheritance;

        import java.util.*;
        import java.lang.*;

        class Dog{

            public static String Name="Miku";

            public void bark(){
                System.out.println("The Dog is Barking");   //class methods
            }

            public void run(){
                System.out.println("The Dog is runing");    //class methods
            }
        }

Я не объявил переменную «Имя», как она может перезаписать переменную суперкласса. Пожалуйста, объясните, как здесь работает переменная "Имя"

        class Hound extends Dog{            
                                                           //Overridden method bark()
            public void bark(){
                super.bark();
                Name="Doggo";

                System.out.println("The Hound " +this.Name +" is barking");
                System.out.println("The Hound " +super.Name +" is barking");
            }
        }

        public class Test6{
            public static void main(String Args[]){

                Hound H=new Hound();
                H.bark();
            }
        }

Вывод кода:

           The Dog is Barking
           The Hound Doggo is barking
           The hound Doggo is barking

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Это не переопределение.
Поскольку это publi c, а НЕ final , у вас есть доступ к edit it.
Поскольку это stati c, вы на самом деле меняете родительское значение из того же пространства памяти.

Подробнее подробности, перейдите по этой ссылке .

0 голосов
/ 04 мая 2020

не отменяется. наследуется дочерним классом Hound.

По определению "Stati c методы и переменные наследуются от суперкласса до подкласса, пока метод доступен для подкласса. Под этим я подразумеваю, если дочерний класс (подкласс) находится в другом пакете, пока метод объявлен как publi c или защищен в суперклассе, он будет унаследован в подклассе. "

, поэтому у вашего класса гончей есть доступ к имени переменной, и он не является окончательным, поэтому значение может быть изменено методами наследующего класса hound.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...