java第八章(1)繼承

來源:互聯網
上載者:User

8.1類的繼承

被整合的類成為父類或者超類(superclass),由整合而得到的類稱為子類(subclass).一個父類可以擁有多個子類,但由於java中不支援多重繼承,所以一個類只能有一個直接的父類.

父類實際上是所有子類的公用成員的集合,而每一個子類則是父類的特殊化,是對公用成員變數和方法在 功能,內涵方面的擴張和延伸.

java語言中有一個成為java.lang.Object的特殊類,所有的類都是直接或間接地繼承該類而得到的.

1).子類的建立

Java中類的繼承是通過extends關鍵字來實現的.子類可以繼承所有非private的成員作為自己的成員.

格式如下:

class SubClass extends SuperClass

{  ......  }

eg:

class Person

{

  private String name;    //構造方法  與 類的成員

  private int age;

  public Person()

  {

    System.out.println( "調用了個人構造方法 Person( )" );

  }

  public void SetNameAge( String name, int age )

  {

    this.name = name;

    this.age = age;

  }

  public void show( )

  {

    System.out.println("name:" + name + " age:" + age );

  }

}

class Students extends Person

{

  private String department;

  public Student( )

  {

    System.out.println( " 調用了學生的構造方法 Student( )" );

  }

  public void SetDepartment( String dep )

  {

    department = dep;

    System.out.println("我是" + department + "的學生" );

  }

}

public class app8_1

{

  public static void main( String[] args )

  { 

    Student stu = new Student( );    //建立Student對象

    stu.SetNameAge( "zhangsan", 21 );    //調用父類的 SetNameAge( ) 方法

    stu.show( );  //調用父類的 show( ) 方法

    stu.SetDepartment( "電腦系" );    //調用子類的SetDepartment( )方法

  }

}

程式執行的結果為:

調用了個人構造方法 Person( ) 

調用了學生的構造方法 Student( )

name: zhangsan age: 21

我是電腦系的學生

2).調用父類中特定的構造方法

eg:

class Student extends Person

{

  private String department;

  public Student( )

  {

    System.out.println("調用了學生的無參構造方法 Student( )" );

  }

  public Student( String name, int age, String dep )

  {

    super( name, age );    //調用父類的有參構造方法

    department = dep;

    System.out.println("我是"+department + "的學生" );

  }

}

3).在子類中訪問父類的成員

使用super不但可以訪問父類的構造方法,還可以訪問父類的成員變數和成員方法,但super不能訪問在子類中添加的成員.

訪問父類成員的格式如下:

    super.<變數名>

    super.<方法名>

若父類中非private成員,則protected成員不僅可以在父類中直接存取,同時也可以在子類中訪問.

4).覆蓋(Overriding)

覆蓋的概念與方法的重載相似,他們均是Java語言"多態"(Polymorphism)的技巧之一.

覆蓋是指在子類中,定義名稱,參數個數與類型均與父類相同的方法,用以重寫父類裡同名方法的功能.

注意:子類中不能覆蓋父類中聲明為 final或 static 的方法.

方法一旦被覆蓋,那麼父類調用該方法也會是調用子類中的方法.但父類不能調用子類中的方法.

覆蓋:與父類的方法名稱,參數個數與類型必須完全相同.

5).不可被繼承的成員與最終類

在預設情況下所有的成員變數都可以被覆蓋,如果父類的成語不希望被子類的成員所覆蓋可以將它們聲明為final.即最終變數,常量.可以訪問,但不能修改.可以增加代碼的安全性.

若成員變數被聲明為final,那麼也不能繼承該變數.

若一個類被final修飾符修飾,則說明這個類是最終類,該類不可以有子類,這種類被稱為最終類.

6).Object類

如果某個類沒用使用關鍵字extends,則該類預設為 java.lang.Object 類的子類.

Object 類常用方法:

public Boolean equals( Object obj )  //判斷兩個物件變數所指向的是否為同一個對象

public String toString( )  //將調用toString( ) 方法的對性愛那個轉換成字串

public final Class getClass( )  //返回調用getClass( ) 方法的對象所屬的類

protected Object clone( )  //返回調用該方法的對象的一個副本

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.