java教程之java繼承示例詳解

姓名: 李小娜

[嵌牛導讀]:這篇文章主要介紹了java繼承示例詳解,需要的朋友可以參考下

[嵌牛鼻子]:什么是繼承(extends) ??

[嵌牛提問]:訪問控制符都有哪些?

[嵌牛正文] :什么是繼承(extends)?

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

ExtendsDemo1.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進行區分

SuperDemo.java

/* 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)操作.

OverrideDemo1.java

/* 怎么對從父類繼承過來的方法進行重寫(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)操作的時候,子類不允許出現與父類同名同參但是不同返回類型的方法.

OverrideDemo2.java

/* 子類中不允許出現與父類同名同參但是不同返回類型的方法

* 出錯信息:

* 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. 子類重寫父類的方法的訪問權限要大于或者等于父類中被重寫的方法

OverrideDemo3.java

/* 子類重寫父類的方法的訪問權限要大于或者等于父類方法的訪問權限

* 出錯信息:

* 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即可

}

}

訪問控制符

訪問控制符有:public, protected, default, private

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 多態 任何域的訪問操作都將有編譯器解析,如果某個方法是靜態的,它的行為就不具有多態性 java默認對象的銷毀順序與...
    yueyue_projects閱讀 988評論 0 1
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應用。 當JAVA程序違反了JA...
    八爺君閱讀 4,656評論 1 114
  • 接到通知說,時間管理第二個30天的實踐結束該交第二份月度檢視了的時候, 我不僅深深地呼吸了一氣,心情有點復雜,有些...
    詹妮特閱讀 213評論 0 0