JavaSE-面向?qū)ο?方法重寫(xiě))
方法重寫(xiě)與之前的方法重載不同
回顧一下方法重載,相同的方法名不同參數(shù)類型和參數(shù)數(shù)量以及參數(shù)順序
package Demo1;
import java.util.Arrays;
public class Demo011 {
public static void main(String[] args) {
Demo011 D11=new Demo011();
D11.demo(12,232,43,3); //4個(gè)實(shí)際參數(shù),則調(diào)用第三個(gè)demo方法
}
public void demo(int a,int b){
System.out.println(a+b);
}
public void demo(int a,int b,int c){
System.out.println(a+b+c);
}
public void demo(int...ints){
System.out.println(Arrays.toString(ints));
}
}
方法重寫(xiě)
重寫(xiě)都是方法的重寫(xiě)與屬性無(wú)關(guān)
package Demo1;
public class Demo012 {
public static void main(String[] args) {
B b =new B();
b.demo();
}
}
class A{
public static void demo(){
System.out.println("Ademo");
}
}
class B extends A{
public static void demo(){
System.out.println("Bdemo");
}
}
執(zhí)行結(jié)果:
Bdemo
父類的引用指向子類進(jìn)行引用
public static void main(String[] args) {
//方法的調(diào)用只和數(shù)據(jù)類型有關(guān)
B b =new B(); //調(diào)用的是B類的靜態(tài)方法
b.demo();
//父類的引用指向子類
A a = new A(); //調(diào)用的是A類的靜態(tài)方法
a.demo();
}
執(zhí)行結(jié)果:
Bdemo
Ademo
使用快捷鍵Alt+insert快速生成重寫(xiě)方法


Override重寫(xiě)方法
class A{
public void demo(){
System.out.println("Ademo");
}
}
class B extends A{
@Override //注解,有功能的注釋
public void demo() {
super.demo(); //默認(rèn)調(diào)用父類的demo()方法
}
}
使用Override重寫(xiě)默認(rèn)是調(diào)用父類的方法,我們可以在重寫(xiě)方法中調(diào)用自己的方法
class A{
public void demo(){
System.out.println("Ademo");
}
}
class B extends A{
@Override
public void demo() {
//super.demo(); 默認(rèn)調(diào)用父類的demo()方法輸出Ademo
System.out.println("Bdemo");
}
}
重寫(xiě)之后執(zhí)行結(jié)果:
Bdemo
Bdemo
子類重寫(xiě)父類的demo()方法之后輸出為demoB,但是并不是子類重寫(xiě)之后將父類的方法修改了,子類在進(jìn)行調(diào)用的時(shí)候調(diào)用的是重寫(xiě)后父類的方法
package Demo3;
public class demo005 {
public static void main(String[] args) {
DemoB DB =new DemoB();
DB.demo(); //調(diào)用子類的demo
DemoA DA=new DemoA(); //調(diào)用父類的demo
DA.demo();
}
}
class DemoA{
public void demo(){
System.out.println("demoA");
}
}
class DemoB extends DemoA{ //繼承
@Override
public void demo(){
System.out.println("demoB");
}
}
執(zhí)行結(jié)果:
demoB
demoA
但是我可以完全不繼承父類也能輸出demoB,demoA
package Demo3;
public class demo005 {
public static void main(String[] args) {
DemoB DB =new DemoB();
DB.demo();
DemoA DA=new DemoA();
DA.demo();
}
}
class DemoA{
public void demo(){
System.out.println("demoA");
}
}
class DemoB{ //A與B沒(méi)有繼承關(guān)系
public void demo(){
System.out.println("demoB");
}
}
執(zhí)行結(jié)果:
demoB
demoA
兩種方式有什么區(qū)別呢?
- 子類繼承父類重寫(xiě)方法,是通過(guò)子類調(diào)用父類的方法進(jìn)行重寫(xiě)的,子類執(zhí)行結(jié)果也是重寫(xiě)后的方法,但并不是子類把父類的方法修改了
- 方式二是在兩個(gè)不同類下創(chuàng)建demo()方法,通過(guò)對(duì)象進(jìn)行調(diào)用。
父類方法若添加static修飾符則重寫(xiě)失敗提示錯(cuò)誤
進(jìn)行方法重寫(xiě)時(shí)靜態(tài)方法和非靜態(tài)方法的區(qū)別很大,如果是加了static靜態(tài)方法,調(diào)用結(jié)果之和左邊定義的類有關(guān)。方法重寫(xiě)與非靜態(tài)方法有關(guān)

私有方法無(wú)法進(jìn)行方法重寫(xiě),重寫(xiě)的關(guān)鍵詞只能是public不能是private私有的

重寫(xiě)小結(jié):
- 方法重寫(xiě)需要有繼承關(guān)系,子類重寫(xiě)父類的方法
- 子類方法與父類的方法方法名和修飾符必須相同
- 以及方法的參數(shù)列表必須相同,不相同則為方法重載
- 修飾符范圍可以擴(kuò)大但是不能縮小,private(?。┄C>proteated–>default–>public(大)
- 重寫(xiě)可能會(huì)拋出異常,異常范圍可以被縮小但不能擴(kuò)大
為什么需要重寫(xiě)?
- 父類的功能子類不一定需要或者不一定滿足,父類的東西太多了子類可能只需要一點(diǎn)
快捷鍵Alt+insert
快速創(chuàng)建Override
總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
java實(shí)現(xiàn)時(shí)間控制的幾種方案
這篇文章主要介紹了java實(shí)現(xiàn)時(shí)間控制的幾種方案,本文從多個(gè)方面給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
Spring?boot集成easy?excel實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能
這篇文章主要介紹了Spring?boot集成easy?excel實(shí)現(xiàn)導(dǎo)入導(dǎo)出操作,使用easyexcel,首先要引入easyexcel的maven依賴,具體的版本根據(jù)你的需求去設(shè)置,本文結(jié)合實(shí)例代碼講解的非常詳細(xì),需要的朋友可以參考下2024-05-05
MyBatisPlus中@TableField注解的基本使用
這篇文章主要介紹了MyBatisPlus中@TableField注解的基本使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Java利用Phantomjs實(shí)現(xiàn)生成圖片的功能
這篇文章主要介紹了Java利用Phantomjs實(shí)現(xiàn)生成圖片的功能,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08
Java子類實(shí)例化總是默認(rèn)調(diào)用父類的無(wú)參構(gòu)造操作
這篇文章主要介紹了Java子類實(shí)例化總是默認(rèn)調(diào)用父類的無(wú)參構(gòu)造操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10

