这个变量是否覆盖

时间:2020-05-04 08:32:01

标签: java inheritance overriding

        /*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
            }
        }

我尚未声明变量“名称”如何覆盖超类变量。 Plaese解释变量“名称”在这里如何工作

        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 :(得分:0)

它没有被覆盖。它是由子类Hound继承的。

根据定义,“静态方法和变量是从超类继承到子类的,只要子类可以访问该方法。我的意思是,如果子类(子类)位于不同的包中,只要该方法在超类中声明为公共方法或受保护方法,它将在子类中继承。”

因此您的猎犬类可以访问变量名,并且不是最终变量,因此可以通过继承类猎犬的方法更改其值。

答案 1 :(得分:0)

这不是最重要的。
由于它是公开而不是最终,因此您可以对其进行修改
由于它是静态,因此实际上您是在相同内存空间中更改父级值

有关更多详细信息,请遵循此link