浅析重写与重载

重写Override

重写指的是在子类中定义的某方法的名称、参数列表、返回值与其父类完全相同,我们说该方法被重写 (Override)。

例如:

class Device {
        int serialnr;
        public final void help() {….}  不可以被重写
        public void setSerialNr(int n) {
        serialnr = n;
        }
}
class Valve extends Device {
        Position s;
        public void setSerialNr(int n) {
        ...
        }
}
这里Valve类继承了Device类,子类中的方法setSerialNr就是对父类中方法setSerialNr的重写。
再举一个例子:
class A {
        int a;
        void m1(){….}
        }
}
class B extends A {
        int b;
        void m2(){….}
        void m1(){….}  重写
        }
}
有方法调用如下:
A  x = new A();
x.m1();
A x = new B();
x.m1();
要注意,到底是调用父类还是子类的方法是 在运行时根据 new后面的类决定的。
父类型中被重写的函数体不为空:意味着对其大多数子类型来说,该方法是可以被直接复用的。
如果父类型中的某个函数实现体为空,意味着其所有子类型都需要这个功能,但各有差异,没有共性,在每个子类中均需要重写。
重写之后,可以利用super()复用父类型中函数的功能,并对其进行扩展。

重载Overload

重载:多个方法具有同样的名字,但有不同的参数列表,返回值类型也可能不同。方便client调用,用不同的参数列表,调用同样的函数。
重载 MUST 要有不同的参数列表!!!
        CAN    有相同/不同的返回值类型
       CAN    相同/不同的public/private/protected
       CAN    处理异常不同
例如已有方法:
public void changeSize(int size,
String name, float pattern) { }
下列哪些是对方法的重载?
public void changeSize(int size, String name) { }√
public int changeSize(int size, float pattern) { }√
public void changeSize(float pattern, String name){ }√
public void changeSize(int length, String pattern, float
size){ }×  虽然参数命名不同,但参数类型和数目完全相同,即参数列表相同!
public boolean changeSize(int size, String name, float
pattern) { }×  虽然返回值类型不同,但是没满足充要条件,参数列表相同了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值