子類在呼叫父類的私有方法中不能直接呼叫,但是可以通過get方法進行呼叫,修改屬性的值可以通過set方法進行修改,而子類想要修改父類中的方法可以使用方法重寫進行操作,
方法重寫與之前的方法多載不同
回顧一下方法多載,相同的方法名不同引數型別和引數數量以及引數順序
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個實際引數,則呼叫第三個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));
}
}
方法重寫
重寫都是方法的重寫與屬性無關
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");
}
}
執行結果:
Bdemo
父類的參考指向子類進行參考
public static void main(String[] args) {
//方法的呼叫只和資料型別有關
B b =new B(); //呼叫的是B類的靜態方法
b.demo();
//父類的參考指向子類
A a = new A(); //呼叫的是A類的靜態方法
a.demo();
}
執行結果:
Bdemo
Ademo
使用快捷鍵Alt+insert快速生成重寫方法


Override重寫方法
class A{
public void demo(){
System.out.println("Ademo");
}
}
class B extends A{
@Override //注解,有功能的注釋
public void demo() {
super.demo(); //默認呼叫父類的demo()方法
}
}
使用Override重寫默認是呼叫父類的方法,我們可以在重寫方法中呼叫自己的方法
class A{
public void demo(){
System.out.println("Ademo");
}
}
class B extends A{
@Override
public void demo() {
//super.demo(); 默認呼叫父類的demo()方法輸出Ademo
System.out.println("Bdemo");
}
}
重寫之后執行結果:
Bdemo
Bdemo
重寫子類之后將父類demo()方法的值也修改為Bdemo
父類方法若添加static修飾符則重寫失敗提示錯誤
進行方法重寫時靜態方法和非靜態方法的區別很大,如果是加了static靜態方法,呼叫結果之和左邊定義的類有關,方法重寫與非靜態方法有關

私有方法無法進行方法重寫,重寫的關鍵詞只能是public不能是private私有的

重寫小結:
- 方法重寫需要有繼承關系,子類重寫父類的方法
- 子類方法與父類的方法 方法名和修飾符必須相同
- 以及方法的引數串列必須相同,不相同則為方法多載
- 修飾符范圍可以擴大但是不能縮小,private(小)–>proteated–>default–>public(大)
- 重寫可能會拋出例外,例外范圍可以被縮小但不能擴大
為什么需要重寫?
- 父類的功能子類不一定需要或者不一定滿足,父類的東西太多了子類可能只需要一點
快捷鍵Alt+insert
快速創建Override
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292712.html
標籤:java
