Java继承(上)习题2-7 解答提问

Java继承(上)习题2-7 解答提问

在该题的解答中,给出的是:

“静态方法和最终方法不能被重写;但静态方法在子类中可以通过隐藏父类方法的方式重新实现。 重写方法的返回值应该与父类方法相同或者是父类方法返回值的子类; 重写方法访问权限必须大于等于父类方法。”

请解释:

  1. “静态方法在子类中可以通过隐藏父类方法的方式重新实现” 是什么意思,是否可以举例说明?

  2. “重写方法访问权限必须大于等于父类方法” 是什么意思,是否可以举例说明?

谢谢!

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

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

1回答
好帮手慕阿莹 2019-02-12 18:39:02

1、静态方法在子类中可以通过隐藏父类方法的方式重新实现:

如果父类中有一个静态的方法,子类也有一个与其方法名,参数类型,参数个数都一样的方法,并且也有static关键字修饰,那么该子类的方法会把原来继承过来的父类的方法隐藏,而不是重写。

如下图所示,如果我们给子类的test()方法加上注解@Override 就会报错(该注解可以验证是否是重写的父类或接口中的方法)

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

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

如果去掉该注解,这个test()方法是可以使用的:

1
2
3
4
5
6
7
8
9
10
package test03;
 
public class C {
    public static void main(String[] args) {
        A a =new B();
        a.test();
        B b = new B();
        b.test();
    }
}
1
2
3
4
5
6
7
package test03;
 
public class A {
    public static void test() {
        System.out.println("这是父类的静态方法");
    }
}
1
2
3
4
5
6
7
8
package test03;
 
public class extends A{
 
    public static void test() {
        System.out.println("这是子类的静态方法");
    }
}

2、假如子类要重写父类中的方法:

子类重写这个方法访问权限的修饰符必须大于父类:

例如:父类test1()方法的修饰符是:protected

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

那么子类重写该方法时,修饰符必须是protected 及其以上权限范围的 ,例如,默认的,public 的

如果写成private就会报错了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package test03;
 
public class B extends A{
 
    public static void test() {
        System.out.println("这是子类的静态方法");
    }
    /*@Override
    public  void test1() {
        System.out.println("这是子类重新父类的方法");
    }*/
     
    /*@Override
    private  void test1() {
        System.out.println("这是子类重新父类的方法");
    }*/
    @Override
    protected  void test1() {
        System.out.println("这是子类重新父类的方法");
    }
     
     
}
1
2
3
4
5
6
7
8
9
10
11
package test03;
 
public class A {
    public static void test() {
        System.out.println("这是父类的静态方法");
    }
     
    protected  void test1() {
        System.out.println("这是父类普通方法");
    }
}

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

  • 【那么子类重写该方法时,修饰符必须是protected 及其以上权限范围的 ,例如,默认的,public 的】默认的访问修饰符比protected小吧?
    2019-02-20 14:23:11
  • 默认的访问修饰符比protected大,从大到小依次是: public ,默认的,protected,private。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-02-20 15:00:07
  • 要不你再仔细想想
    2019-02-20 15:06:45
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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