关于父类与子类之间的静态方法的疑问

关于父类与子类之间的静态方法的疑问

什么是 不能覆盖掉父类的静态方法

什么是 屏蔽(隐藏)掉父类的静态方法

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕珊 2019-07-28 15:54:30

你好!如果在子类中新定义一个和父类一样的属性,那么父类的属性可以被看成隐藏了。可以看一下下面代码的输出结果,当使用子类的引用调用age,得到的是子类中的值。当使用父类引用调用,得到的是父类的age的值。所以父类的age还是存在的,只是使用的方式不同了。

代码如下:

public class A {
public int age=5;
}
public class B extends A{
public int age=10;
}
public class Test {
public static void main(String[] args) {
B b=new B();
System.out.println(b.age);
A a=new B();
System.out.println(a.age);
}
}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小班 2019-07-27 14:16:48

        同学你好,1、静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制即可以调用;
  (1)如果子类里面定义了静态方法和属性,则这时候父类的静态方法或属性称之为"隐藏";
  (2)如果想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成。

    2、这里可以参考如下例子来理解:

父类代码

public class StaticParent {
         public static int a = 0;   
          public static void printA() {    
              System.out.println("In Parent, a = " + a); 
          }
        }

子类代码

public class StaticSon extends StaticParent {
    public static void main(String[] args) {
        printA();
        StaticParent a = new StaticSon();
                a.printA();
    }
   // @Override  这里使用这个注解表示重写这个方法,所以这里不是对这个静态方法的重写
    public static void printA() {
        System.out.println("In son a = " + a);
    }
}

结果如下:

http://img1.sycdn.imooc.com//climg/5d3beb0100010ac706420284.jpg

http://img1.sycdn.imooc.com//climg/5d3bec04000122dc05380415.jpg

所以说这里的printA只是对父类中的方法进行了隐藏,当使用父类引用接收子类对象,调用printA时,还是父类中的方法,并没有被覆盖

  • 提问者 慕容3243381 #1
    在问一个,在子类中新定义一个和父类一样的属性,那是属于什么呢?是重新定义还是?
    2019-07-28 09:59:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师