繼承就是子類繼承父類的特征和行為,使得子類對象(實(shí)例)具有父類的實(shí)例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。繼承是通過extends關(guān)鍵字進(jìn)行的
繼承過程中的問題
```
package animal;
public class Animal {
int weight = 888;
public void eat() {
System.out.println("Animal eat");
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
```
```
package animal;
public class Cat extends Animal {
int weight = 1000;//與父類的變量名相同
public String string = "hahhahha";
@Override
public void eat(){
System.out.println("Cat eat");
}
public void jump(){
System.out.println("Cat jump");
}
@Override
public int getWeight() {
return weight;
}
@Override
public void setWeight(int weight) {
this.weight = weight;
}
public String getString() {
return string;
}
}
```
```
import animal.Animal;
import animal.Cat;
public class Main {
public static void main(String[] args) {
Animal animal = new Cat();//父類對象引用指向子類對象
System.out.println(animal.toString());
animal.eat();//執(zhí)行的是Cat中的方法
System.out.println(animal.getWeight());//由于override了父類方法。調(diào)用的Cat中的方法,因此輸出的是1000。如果需要訪問父類的weight需要通過super關(guān)鍵字 (super.weight)
// animal.jump(); 會提示jump方法未定義向上轉(zhuǎn)型時會遺失與父類對象不同的方法,而變量不會遺失
Cat cat = (Cat) animal;//向下轉(zhuǎn)型,在編譯時是不會報錯的,運(yùn)行時可能會出現(xiàn)ClassCastException。
System.out.println(cat.toString());
}
}
```
運(yùn)行結(jié)果:
animal.Cat@6bc7c054
Cat eat
1000
animal.Cat@6bc7c054
運(yùn)行結(jié)果表明:animal中指向的是cat對象。而由于cat繼承自animal因此擁有animal所有非private的方法和變量。但由于是animal的引用,因此無法使用cat中與父類不同的方法。
最后建議:在需要override方法時,加上@Override的注解。