【问题标题】:Is this variable Overriding这个变量是否覆盖
【发布时间】:2020-05-04 08:32:01
【问题描述】:
        /*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

【问题讨论】:

  • "The hound Doggo is baring" 不会被您显示的代码打印出来。另外,变量覆盖是什么意思?
  • 因为你有 Name 作为 protected ,所以这个成员被继承了
  • “变量覆盖”不是一件事

标签: java inheritance overriding


【解决方案1】:

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

根据定义“静态方法和变量从超类继承到子类,只要子类可以访问该方法。我的意思是如果子类(子类)在不同的包中,那么,只要该方法在超类中被声明为 public 或 protected,它就会在子类中被继承。”

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

【讨论】:

  • 好的,但是在树皮里面我把“名字”改成了doggo。我没有声明变量“名称”,为什么它不会引发错误。请澄清。
  • 当 hound 类扩展 Dog 类时,它会自动拥有 Dog 提供的所有变量和方法,并且可以根据访问权限进行访问。所以 Hound 不仅可以访问 bark() 和 run() 方法,还可以访问“Name”变量。
【解决方案2】:

它不是压倒一切的。
由于它是public 而不是final,因此您可以对其进行修改
由于它是静态,您实际上是从相同内存空间更改父值

更多详情,请关注link

【讨论】:

  • 好的,我知道了,但是我没有在子类中声明变量“Name”,所以为什么它没有抛出错误
  • 它不仅在子类上,Dog.Name 可以在任何地方使用。它更像是共享信息。看看上面附加的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2022-09-27
  • 2011-05-25
  • 2014-01-19
  • 2019-03-16
  • 2020-10-27
相关资源
最近更新 更多