Java方法重写(override),附与方法重载的比较

方法重写的来源:
子类用”extends“关键字继承父类的所有成员(包括private修饰的成员,即使不能访问),其中被继承的方法可被修改并覆盖原有方法,这就叫做方法的重写(重定义),方法重写只出现在具有继承关系的子类中。

方法重写格式

  1. 子类中重写方法的方法名参数(参数个数和参数类型)必须与原方法相同
  2. 子类中重写方法的返回类型必须与原方法的返回类型相同或是其子类
  3. 子类中重写方法的访问权限必须与原方法的访问权限相同或更宽
    注:格式2是jdk1.5及其后版本添加的,低版本不能修改返回类型

例子

定义父类

package test;

public class BaseClass {
    protected BaseClass print() {
        System.out.println("我是父类");
        BaseClass baseClass = new BaseClass();
        return baseClass;
    }
}

父类中print方法的访问权限为protected,返回类型为BaseClass,方法名为print没有参数

定义子类

package test;

public class DerivedClass extends BaseClass {
    @Override
    public DerivedClass print() {
        System.out.println("我是子类");
        DerivedClass derivedClass = new DerivedClass();
        return derivedClass;
    }
}

子类中print方法的访问权限为public,返回类型为DerivedClass ,方法名为print,同样没有参数

定义包含main()方法的类

package test;

public class Main {
    public static void main(String[] args) {
        BaseClass baseClass = new DerivedClass();
        baseClass.print();
    }
}

语句” BaseClass baseClass = new DerivedClass();“定义了一个指向子类对象的父类引用(多态),方法的输出如下:
在这里插入图片描述
可以看到,输出结果为”我是子类“,即语句”baseClass.print();“调用了子类中的print()方法,该方法是对DerivedClass 中print方法的重写。
注:DerivedClass 中print方法继承自父类BaseClass 的print方法。

注意比较例子中的print方法是否符合方法重写格式,以加深理解。

注意区分方法重写和方法重载:

方法重载格式:

  1. 方法名相同
  2. 方法参数不同,参数不同包括参数个数参数类型不同
  3. 返回类型可以相同也可以不相同,即重载与返回类型无关

方法重写出现在继承关系中。
方法重载一般出现在同一个类中,也可以出现在继承关系中

参考:

AbsoluteJava5ed2012, p439, " Overriding a Method Definition "

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值