色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java的覆蓋和隱藏知乎

在Java中,有兩個(gè)特性經(jīng)常被提到,它們分別是“覆蓋”和“隱藏”,這兩個(gè)概念的理解是Java面向?qū)ο缶幊讨械闹匾獌?nèi)容。

Java中的方法重載是指在同一個(gè)類中編寫多個(gè)方法,這些方法具有相同的方法名,但是具有不同的參數(shù)列表。Java中的方法覆蓋與此類似,但不同的是,虛擬機(jī)在運(yùn)行時(shí)根據(jù)實(shí)例的類型動(dòng)態(tài)調(diào)用相應(yīng)的方法實(shí)現(xiàn)。

public class Animal{
public void move(){
System.out.println("Animal can move");
}
}
public class Cat extends Animal{
public void move(){
System.out.println("Cat can walk and run");
}
}
public class Dog extends Animal{
public void move(){
System.out.println("Dog can walk and run");
}
}

如上所示,Cat和Dog類都重寫了Animal類中的move()方法。在運(yùn)行時(shí),如果我們將一個(gè)Cat或Dog對(duì)象賦值給一個(gè)Animal引用,方法調(diào)用時(shí),將會(huì)動(dòng)態(tài)地調(diào)用到Cat或Dog的move()方法,而不是Animal的move()方法。這就是“覆蓋”的概念。

然而,在Java中,還存在一種叫做“隱藏”的現(xiàn)象,它指的是子類中定義了一個(gè)與父類中同名的方法或變量。這個(gè)方法或變量將會(huì)屏蔽父類中的同名方法或變量,即使父類中存在該方法或變量,也無法通過子類的對(duì)象調(diào)用到。

public class Animal{
public void move(){
System.out.println("Animal can move");
}
public void eat(){
System.out.println("Animal can eat");
}
}
public class Cat extends Animal{
public void move(){
System.out.println("Cat can walk and run");
}
public void eat(){
System.out.println("Cat can eat");
}
}
public class Demo{
public static void main(String []args){
Animal animal = new Cat();
animal.eat();
animal.move();
//下面這句將會(huì)報(bào)錯(cuò)
animal.catchMouse();
}
}

如上所示,Cat類重寫了Animal中的eat()方法,這個(gè)方法將會(huì)隱藏Animal類中的eat()方法。當(dāng)我們將一個(gè)Cat對(duì)象賦值給一個(gè)Animal引用時(shí),我們只能訪問到Cat中定義的eat()方法。在調(diào)用時(shí)如果使用了一個(gè)在Animal類中未定義的方法,例如catchMouse()方法,將會(huì)拋出編譯錯(cuò)誤。