java的繼承

繼承是:新定義的類是從已有的類中獲取屬性和方法的現象。 這個已有的類叫做父類, 從這個父類獲取屬性和方法的類叫做子類。

/*什麼是繼承*/
public class ExtendsDemo1 {
public static void main(String[] args) {
Truck t = new Truck();
t.size = 100; //不建議這麼寫。初始化成員變量最好使用構造方法,或者提供set(), get()接口.
//貨車類的一個實例t從汽車類從繼承了size, color屬性。
//而貨車比汽車多一個貨箱
} 
}
class Car { //汽車
int size; //車體大小
String color; //顏色
}
class Truck extends Car { //貨車
String packingBox; //貨箱
}


繼承的好處

1. 提高了代碼的重用性

2. 讓類和類之間產生了關係, 爲多態創造了條件。

繼承(extends)的格式 


class SubClass extends SuperClass {
//執行語句;
}


super關鍵字

1. super關鍵字和this的用法相同

2. this代表本類引用, super代表父類引用

3. 當子類和父類出現同名成員的時候, 可以用super 和 this進行區分



/* super的用法
* 輸出結果:
* super.i = 10, this.i = 20
*/
public class SuperDemo {
public static void main(String[] args) {
new SubClass().showMessage();
} 
}
class SuperClass {
int i = 10; 
}
class SubClass extends SuperClass {
int i = 20;
public void showMessage() {
System.out.printf("super.i = %d, this.i = %d\n", super.i, this.i);
} 
}


對從父類繼承過來的方法進行重寫(Override)

1. 當子類中出現與父類一模一樣的方法(返回值, 函數名, 形參)時, 會出現重寫(Override)操作.



/* 怎麼對從父類繼承過來的方法進行重寫(Override)
* 輸出結果:
* SuperClass: I am good~
* SubClass: I am excellent~~~
*/
public class OverrideDemo1 {
public static void main(String[] args) {
SubClass sc = new SubClass();
sc.speak();
} 
}
class SuperClass {
public void speak() {
System.out.println("SuperClass: I am good~");
} 
}


class SubClass extends SuperClass {
@Override //@Override表示下面出現的方法會出現重寫操作,由編譯器檢查,如果達不到重寫的條件,就會報錯。一定程度上增加了代碼的安全性
和健壯性

public void speak() {
super.speak();
System.out.println("SubClass: I am excellent~~~");
} 
}


2. 在對父類方法進行重寫(Override)操作的時候,子類不允許出現與父類同名同參但是不同返回類型的方法.


/* 子類中不允許出現與父類同名同參但是不同返回類型的方法 
* 出錯信息:
* OverrideDemo.java:20: error: f() in SubClass cannot override f() in SuperClass
* public int f() {
* ^
* return type int is not compatible with void
* OverrideDemo.java:19: error: method does not override or implement a method from a supertype
* @Override
* ^
* 2 errors
*/
public class OverrideDemo2 {
public static void main(String[] args) {
} 
}
class SuperClass {
public void f() {
} 
}
class SubClass extends SuperClass {
@Override
public int f() {
return 1;
} 
}


3. 子類重寫父類的方法的訪問權限要大於或者等於父類中被重寫的方法


/* 子類重寫父類的方法的訪問權限要大於或者等於父類方法的訪問權限
* 出錯信息:
* OverrideDemo.java:18: error: f() in SubClass cannot override f() in SuperClass
* protected void f() {
* ^
* attempting to assign weaker access privileges; was public
* 1 error
*/
public class OverrideDemo3 {
public static void main(String[] args) {
} 
}
class SuperClass {
public void f() {
} 
}
class SubClass extends SuperClass {
@Override
protected void f() { //把這裏的訪問權限改爲public即可
} 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章