鍍金池/ 教程/ Java/ Java 繼承
Java 接口
Java 方法
Java 數(shù)字
Java 條件判斷
Java 異常處理
Java 字符
Java 重寫
Java 網(wǎng)絡(luò)編程
Java 數(shù)據(jù)結(jié)構(gòu)
Java 的對象和類
Java 多線程
Java 封裝
Java 數(shù)組
Java Applet 基礎(chǔ)
Java 庫類
Java 抽象
Java 繼承
Java 正則表達式
Java 描述符的類型
Java 發(fā)送郵件
Java 序列化
Java 泛型
Java 多態(tài)
Java 變量類型
Java 基本數(shù)據(jù)類型
Java 包
Java 快速參考指南
Java 基本運算符
Java 概述
Java 字符串
Java 循環(huán)控制
Java 環(huán)境設(shè)置
Java 文件注釋
Java 文件和 I/O
Java 集合
Java 基本語法
Java 日期和時間

Java 繼承

繼承可以被定義為一個對象獲取另一個對象屬性的過程。使用繼承可以使信息以繼承順序有序管理。

當我們談?wù)撈鹄^承,最常用的關(guān)鍵字應(yīng)該為 extends 和 implements。 這些關(guān)鍵字將決定一個對象是否是 A 類型或是其他類型。通過使用這些關(guān)鍵字,我們可以使一個對象獲得另一個對象的屬性。

IS-A 關(guān)系

IS-A 是說:這個對象所屬于另一個對象。讓我們來看怎么用關(guān)鍵字 extends 來實現(xiàn)繼承。

public class Animal{
}

public class Mammal extends Animal{
}

public class Reptile extends Animal{
}

public class Dog extends Mammal{
}

現(xiàn)在,基于上面的例子,在面向?qū)ο缶幊讨?請遵循以下幾點:

  • Animal 是 Mammal 類的父類。
  • Animal 是 Reptile 類的父類。
  • Reptile 和 Mammal 是 Animal 類的子類。
  • Dog 是 Mammal 類和 Animal 類的子類。

現(xiàn)在,針對 IS-A 關(guān)系,我們可以說:

  • Mammal 是一個 Animal
  • Reptile 是一個 Animal
  • Dog 是一個 Mammal
  • Dog 也是一個 Animal

使用關(guān)鍵字 extends,子類可以繼承父類除了私有屬性的所有屬性。

使用 instance 操作我們可以保證 Mammal 實際上是一個 Animal。

示例

public class Dog extends Mammal{

   public static void main(String args[]){

      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

這將得到如下結(jié)果:

true
true
true

我們已經(jīng)很好理解了 extends 關(guān)鍵字,讓我們來看 implements 關(guān)鍵字是如何確立 IS-A 關(guān)系的。

implements 關(guān)鍵字,是在類繼承接口的時候使用的。接口是不能被類使用 extends 繼承的。

示例

public interface Animal {}

public class Mammal implements Animal{
}

public class Dog extends Mammal{
}

關(guān)鍵字 instanceof

讓我們使用 instanceof 操作符來檢查確定是否 Mammal 實際上是 Animal, dog 實際上是一種Animal。

interface Animal{}

class Mammal implements Animal{}

public class Dog extends Mammal{
   public static void main(String args[]){

      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
} 

這將產(chǎn)生如下結(jié)果:

true
true
true

HAS-A 關(guān)系:

該關(guān)系是基于使用方便的。這決定了一個類是否含有 A 的一些屬性。該關(guān)系幫助減少代碼重復(fù)和漏洞的出現(xiàn)。

讓我們看下面的例子:

public class Vehicle{}
public class Speed{}
public class Van extends Vehicle{
    private Speed sp;
} 

這個例子表明 Van 含有 Speed.因為我們單獨定義了 Speed 類,我們不必將整個 Speed 類的代碼加入 Van 類,使其在多個應(yīng)用程序中重用 Speed 類。

在面向?qū)ο笾校脩舨挥萌タ紤]哪一個對象在做實際的工作。為了實現(xiàn)這個功能, Van 類向用戶隱藏了實現(xiàn)具體細節(jié)的類。當用戶讓 Van 類去做一項工作時,Van 類或者自己來做,或者求助其他類來做這項工作。

請記住一個非常重要的事實,Java 只支持單繼承,這意味著一個類只能繼承一個類,所以以下的是非法的:

public class extends Animal, Mammal{} 

然而,一個類可以實現(xiàn)一個或多個接口,這使得 Java 可以擺脫不能多繼承的問題。