1. 程式人生 > >java基礎——重寫、隱藏、過載

java基礎——重寫、隱藏、過載

方法簽名:方法名+引數列表(引數型別、個數、順序)

重寫:

子類重寫父類方法,僅限於例項方法。成員變數和靜態方法不能被重寫,只能被隱藏。

重寫原則:

1.方法名相同,引數型別相同。

2.子類返回型別小於等於父類返回型別。

3.子類異常小於等於父類異常。

4.子類訪問許可權大於等於父類訪問許可權。

重寫方法可以改變其他方法修飾符如final,synchronize,native等。不管被重寫方法中有無final修飾的引數,重寫方法都可以增加、保留、取出這個引數的final修飾符,即引數修飾符不屬於方法簽名。

 

過載:

同一個類中,有多個方法名相同,引數列表不同(個數、型別不同),與返回值無關,與許可權修飾符無關(

https://blog.csdn.net/weixin_42294335/article/details/80427124,如果只有返回值不同,會提示方法名重複。

java中方法可以與類重名,構造方法沒有返回值。

 

隱藏:

形式上與重寫類似,但只有成員變數和靜態方法可以被隱藏。

 

 

 

3、隱藏和覆蓋的區別(https://blog.csdn.net/snow_7/article/details/51579278

(1)被隱藏的屬性,在子類被強制轉換成父類後,訪問的是父類中的屬性

  在無強制轉換時子類要訪問父類的屬性使用super關鍵字

(2)被覆蓋的方法,在子類被強制轉換成父類後,呼叫的還是子類自身的方法

     子類要是想訪問父類的方法,可以使用super關鍵字
 

public class Test {
    public static void main(String[] args)  {
    	Circle circle = new Circle();//本類引用指向本類物件
        Shape shape = new Circle();//父類引用指向子類物件(會有隱藏和覆蓋)
        
       System.out.println(circle.name);
       circle.printType();
       circle.printName();
       //以上都是呼叫Circle類的方法和引用
       
        System.out.println(shape.name);//呼叫父類被隱藏的name屬性
        shape.printType();//呼叫子類printType的方法
        shape.printName();//呼叫父類隱藏的printName方法 
    }
}
 
class Shape {
    public String name = "shape";
     
    public Shape(){
        System.out.println("shape constructor");
    }
     
    public void printType() {
        System.out.println("this is shape");
    }
     
    public static void printName() {
        System.out.println("shape");
    }
}
 
class Circle extends Shape {
    public String name = "circle"; //父類屬性被隱藏
     
    public Circle() {
        System.out.println("circle constructor");
    }
   
    //對父類例項方法的覆蓋
    public void printType() {
        System.out.println("this is circle");
    }
    
   //對父類靜態方法的隱藏  
    public static void printName() {
        System.out.println("circle");
    }
}
//執行結果:
shape constructor
circle constructor
 
circle
this is circle
circle
 
shape
this is circle
shape

 

可以看到轉到父類物件後,重寫的呼叫的是自己的靜態方法或成員變數,隱藏的呼叫的是父類的靜態方法或成員變數。

 

 

參考:

1. https://github.com/kdn251/interviews

2. https://blog.csdn.net/snow_7/article/details/51579278

3.https://blog.csdn.net/weixin_42294335/article/details/80427124