1.1. 方法重写(覆写overwrite)
点击查看视频讲解
1.1.1. 方法重写的概念
当子类继承父类后,可以直接拥有父类非私有的成员并可以直接调用父类非私有方法。
如果子类认为父类提供的方法不满足自己的需求,子类可以按照子类自身的逻辑重新定义继承过来的父类方法,这个重新定义父类方法的过程叫做方法重写。方法重写后,通过子类对象调用这个方法,调用的就是子类重写后的方法。
一般开发中,子类重写父类方法经常发生;
举例:
描述一个手机类,它具有打电话和发短信的功能;
智能手机打电话的功能更先进,可以视频通话;短信也可以发语音、图片等;
表示老的手机:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /** * * Phone * 表示老的手机 * @author 快学大数据 * 2018年6月19日 上午11:27:23 */ public class Phone { private String num; //手机号 public Phone() { } public Phone(String num) { this .num = num; } public String getNum() { return num; } public void setNum(String num) { this .num = num; } /** * 给别人打电话 * @param targNum 目标手机号 */ public void call(String targNum) { System.out.println(num + " 给 " +targNum+ "打电话" ); } /** * 给别人发短信 * @param targNum :收信人手机号 * @param msg:发送的短信内容 */ public void sendMsg(String targNum,String msg) { System.out.println(num + "给" +targNum+ "发送短信,内容是:" +msg); } } |
表示新的手机:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class NewPhone extends Phone{ public NewPhone() {} //无参构造函数 //有参构造函数,将接受的参数通过super语句传给父类 public NewPhone(String num) { super (num); } //因为老的手机的打电话和发短信的功能,不满足新的手机的要求,所以 //需要重写父类打电话和发短信的方法 /** * 给别人打电话 * @param targNum 目标手机号 */ public void call(String targNum) { System.out.println(getNum() + "和" +targNum+ "视频通话中……" ); } /** * 给别人发短信 * @param targNum :收信人手机号 * @param msg:发送的短信内容 */ public void sendMsg(String targNum,String msg) { String num = getNum(); System.out.println(num + "给" +targNum+ "发送一个笑脸表情!" ); System.out.println(num + "给" +targNum+ "发送短信,内容是:" +msg); System.out.println(num + "又给" +targNum+ "发送一段语音!" ); } } |
测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | public class Test { //描述一个手机类,它具有打电话和发短信的功能; public static void main(String[] args) { //创建一个手机,手机号为:12345678912 Phone phone = new Phone( "12345678912" ); //调用phone的方法,模拟打电话 phone.call( "18888888888" ); //调用phone对象的方法,模拟发短信 phone.sendMsg( "18888888888" , "刚才给你打电话啦" ); System.out.println( "------------------------------" ); //接下来,定义一个类描述新的手机,可以打电话、发短信、玩游戏, //打电话可以视频通话,发短信,可以发多媒体信息; //因为新的手机也是手机,和手机类具有是的关系;同时新的手机也具有手机号的属性; //所以为了简化代码,并且描述二者的是的关系,应该让新的手机继承旧的手机类 //创建一个新的手机对象 NewPhone np = new NewPhone( "18688888888" ); np.call( "18888888888" ); np.sendMsg( "18888888888" , "刚才给你打电话啦" ); } } |