Java 重写(Override)

重写:子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。子类和父类的方法必须要一致,方法体不同。即外壳不变,核心重写。

重写都是方法的重写,和属性无关。

静态方法(声明为 static 的方法 )不能被重写,但是能够被再次声明。


一、方法的重写

我们首先了解一下方法的重写。如下所示,在B类中声明一个方法 test():

public class B {
    public  void test(){
        System.out.println("B=>test()");
    }
}

A是B的子类,键盘敲击 alt+insert ,选择 Override Methods,重写方法,代码如下所示:

public class A extends B{
    @Override
    public void test() {
        super.test();
    }
}

我们将 super.test(); 修改成自己想要的方法体,则完成了方法的重写。如下所示:

public class A extends B{
    @Override
    public void test() {
        System.out.println("A=>test()");
    }
}

此时我们在主类中进行输出,代码如下所示:

public class Application {

    public static void main(String[] args) {

        A a = new A();
        a.test();

        //父类的引用指向了子类
        B b = new A();  //子类重写了父类的方法
        b.test();
    }
}

输出结果如下所示:

A=>test()
A=>test()

我们可以看到,输出的都是子类的方法。这就是方法的重写。


二、static静态方法无法重写

如果A类和B类中的 test()方法都是static的,那么就无法重写。 当test方法都是static的情况下,我们在主类中进行输出,代码如下:

public class Application {
    public static void main(String[] args) {
        //static静态方法的调用,只跟左边定义的数据类型有关
        A a = new A();
        a.test();

        //父类的引用指向了子类
        B b = new A(); 
        b.test();
    }
}

输出结果如下所示:

A=>test()
B=>test()

左边定义的数据类型,决定了具体调用的方法。数据类型为A,则调用A中的方法。数据类型为B,则调用B中的方法。


三、方法重写特点总结

重写:Alt+Insert:Override

需要有继承关系,子类重写父类的方法。

为什么需要重写:父类的功能,子类不一定需要,或者不一定满足。

  1. 方法名必须相同
  2. 参数列表必须相同
  3. 修饰符:范围可以扩大,但不能缩小
    public>protected>default>private
  4. 抛出的异常:范围可以被缩小,但不能扩大:
    ClassNotFoundException(找不到该类的异常,范围小) --> Exception(大)
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值