1.1.方法重写(覆写overwrite)
1.1.1.方法重写的概念
当子类继承父类后,可以直接拥有父类非私有的成员并可以直接调用父类非私有方法。
如果子类认为父类提供的方法不满足自己的需求,子类可以按照子类自身的逻辑重新定义继承过来的父类方法,这个重新定义父类方法的过程叫做方法重写。方法重写后,通过子类对象调用这个方法,调用的就是子类重写后的方法。
一般开发中,子类重写父类方法经常发生;
举例:
描述一个手机类,它具有打电话和发短信的功能;
智能手机打电话的功能更先进,可以视频通话;短信也可以发语音、图片等;
表示老的手机:
/**
*
* Phone
*表示老的手机
*@author 快学大数据
* 2018年6月19日 上午11:27:23
*/
public classPhone {
privateStringnum;//手机号
publicPhone() { }
publicPhone(Stringnum) {
this.num=num;
}
publicString getNum() {
return num;
}
public voidsetNum(Stringnum) {
this.num=num;
}
/**
*给别人打电话
*@paramtargNum目标手机号
*/
public voidcall(StringtargNum) {
System.out.println(num+"给 "+targNum+"打电话");
}
/**
*给别人发短信
*@paramtargNum:收信人手机号
*@parammsg:发送的短信内容
*/
public voidsendMsg(StringtargNum,Stringmsg) {
System.out.println(num+"给"+targNum+"发送短信,内容是:"+msg);
}
}
表示新的手机:
public classNewPhoneextendsPhone{
publicNewPhone() {}//无参构造函数
//有参构造函数,将接受的参数通过super语句传给父类
publicNewPhone(Stringnum) {
super(num);
}
//因为老的手机的打电话和发短信的功能,不满足新的手机的要求,所以
//需要重写父类打电话和发短信的方法
/**
*给别人打电话
*@paramtargNum目标手机号
*/
public voidcall(StringtargNum) {
System.out.println(getNum() +"和"+targNum+"视频通话中……");
}
/**
*给别人发短信
*@paramtargNum:收信人手机号
*@parammsg:发送的短信内容
*/
public voidsendMsg(StringtargNum,Stringmsg) {
Stringnum= getNum();
System.out.println(num+"给"+targNum+"发送一个笑脸表情!");
System.out.println(num+"给"+targNum+"发送短信,内容是:"+msg);
System.out.println(num+"又给"+targNum+"发送一段语音!");
}
}
测试类:
public classTest {
//描述一个手机类,它具有打电话和发短信的功能;
public static voidmain(String[]args) {
//创建一个手机,手机号为:12345678912
Phonephone=newPhone("12345678912");
//调用phone的方法,模拟打电话
phone.call("18888888888");
//调用phone对象的方法,模拟发短信
phone.sendMsg("18888888888","刚才给你打电话啦");
System.out.println("------------------------------");
//接下来,定义一个类描述新的手机,可以打电话、发短信、玩游戏,
//打电话可以视频通话,发短信,可以发多媒体信息;
//因为新的手机也是手机,和手机类具有是的关系;同时新的手机也具有手机号的属性;
//所以为了简化代码,并且描述二者的是的关系,应该让新的手机继承旧的手机类
//创建一个新的手机对象
NewPhonenp=newNewPhone("18688888888");
np.call("18888888888");
np.sendMsg("18888888888","刚才给你打电话啦");
}
}