<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
子類繼承父類別後,可以在子類中書寫一個與父類別同名同參的方法,從而實現對父類別中同名同引數的方法的覆蓋,我們把這一過程叫做方法的重寫(override)
2.1 當父類別的方法滿足不了子類的需求的時候,需要在子類中對該方法進行重寫
2.2 題目與分析
例如存在一個父類別Peple,子類Chinese,父類別中有一個say()方法,輸出人在說話,但是我想要的時子類時候呼叫時輸出中國人在說話,很顯然直接呼叫方法不行,所以需要在子類中對say方法進行方法的重寫
2.3 範例程式碼
People類
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public void say(){ System.out.println("人在說話"); } }
Chinese類
public class Chinese extends Peple{ public Chinese() { } @Override public void say() { System.out.println("中國人在說話"); } }
Test03類
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.say(); //當進行方法重寫時,呼叫的是子類的say()方法 } }
2.4 範例程式碼執行截圖
@Override 許可權修飾符 返回值型別 方法名(形參列表){ //子類重寫的方法的許可權修飾符的存取許可權必須大於等於父類別的,但是父類別不能是private //當父類別的返回值型別為基本資料型別或者為void時,子類方法的返回值型別也應該為對應的基本資料型別或者void }
3.2.1 子類重寫的方法的存取許可權應該大於等於父類別方法的存取許可權
a 範例程式碼
People類
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } //沒有寫存取許可權的話,預設是default存取許可權 void say(){ System.out.println("人在說話"); } }
Chinese類
public class Chinese extends Peple{ public Chinese(){ } //父類別say方法的存取許可權為default,子類say方法的存取許可權為public, // 符合子類方法存取許可權大於等於父類別方法存取許可權的要求 @Override public void say() { System.out.println("中國人在說話"); } }
Test03類
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.say(); } }
b 範例程式碼執行截圖
3.2.2 當父類別方法的返回值型別為基本資料型別時,子類重寫的方法的返回值型別也為對應的基本資料型別
a 範例程式碼
People類
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public double add(int a,int b){ return a+b; } }
Chinese類
public class Chinese extends Peple{ public Chinese(){ } @Override public double add(int a,int b) { return a+b+1; } }
Test03類
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); System.out.println("求和之和再加上1的結果為: "+c.add(2, 3)); } }
b 範例程式碼執行截圖
3.2.3 當父類別方法的返回值型別為void時,子類重寫的方法的返回值型別也為void
a 範例程式碼
People類
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public void eat(){ System.out.println("人的主食一般是熟食"); } }
Chinese類
public class Chinese extends Peple{ public Chinese(){ } @Override public void eat() { System.out.println("中國人的主食是大米或者小麥"); } }
Test03類
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.eat(); } }
b 範例程式碼執行截圖
3.2.4 當父類別的方法被static修飾的時候,子類是不能重寫該方法的
a 錯誤範例程式碼
People類
public class Peple { private String name; private String sex; private int age; private int weight; public Peple() { } public Peple(String name, String sex, int age, int weight) { this.name = name; this.sex = sex; this.age = age; this.weight=weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } public static void eat(){ System.out.println("人的主食一般是熟食"); } }
Chinese類
public class Chinese extends Peple{ public Chinese(){ } @Override public void eat() { System.out.println("中國人的主食是大米或者小麥"); } }
Test03類
public class Test03 { public static void main(String[] args) { Chinese c=new Chinese(); c.eat(); } }
b 範例程式碼執行截圖
編譯時idea給出的錯誤提示
強制執行後給出的錯誤提示
3.3.1 複製法
步驟
1.先直接複製(Ctrl+C)父類別中需要被子類重寫的那個方法
2.貼上(Ctrl+V)到子類中
3.修改子類中的功能,便於實現父類別實現不了的需求
操作截圖展示
3.3.2 編譯器提示法
步驟
1.先在子類類體中,非方法內位置,寫入一個英文@符號
2.選中提示中的Overide/implement methods…
3.雙擊後彈出一個重寫方法選擇列表彈窗
4.根據提示選中對應的需要重寫的方法
5.點選ok按鈕後會在子類中生成一個你選中方法的重寫方法
6.把生成的重寫方法中的自動生成的首行去掉,然後根據需求在方法體裡面寫入合適的語句
操作截圖展示
3.3.3 快捷鍵法
步驟
1.把滑鼠移動到重寫方法應該生成的位置
2.同時按下鍵盤上的Alt鍵和Insert鍵,
3.在彈出框中,選中Override Methods
4.雙擊後會彈出一個介面,在介面中選中需要被子類重寫的方法
5.點選OK按鈕後會生成所需要的重寫方法
6.去掉重寫方法中自動生成的首行,然在其方法體裡面寫入合適的語句
操作截圖展示
以上就是一文解析Java中的方法重寫的詳細內容,更多關於Java方法重寫的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45