1. 程式人生 > >java基礎知識--繼承

java基礎知識--繼承

但是 port [] 3.1 語句 ring 都是 -c ffffff

繼承

 

1、繼承的概念

繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。

繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

  1、類的繼承格式

    在 Java 中通過 extends 關鍵字可以申明一個類是從另外一個類繼承而來的,一般形式如下:   

class 父類 {
}
 
class 子類 extends 父類 {
}

  2、繼承的特性  

    • 子類擁有父類非private的屬性,方法。

    • 子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。

    • 子類可以用自己的方式實現父類的方法。

    • Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關系就是C類是B類的父類,B類是A類的父類,這是java繼承區別於C++繼承的一個特性。

    • 提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯系) 

  3、繼承關鍵字

  繼承可以使用 extends 和 implements 這兩個關鍵字來實現繼承,而且所有的類都是繼承於 java.lang.Object,當一個類沒有繼承的兩個關鍵字,

  則默認繼承object(這個類在 java.lang 包中,所以不需要 import)祖先類。

  extends關鍵字

    在 Java 中,類的繼承是單一繼承,也就是說,一個子類只能擁有一個父類,所以 extends 只能繼承一個類。     

public class Animal { 
    private String name;   
    private int id; 
    public Animal(String myName, String myid) { 
        //初始化屬性值
    } 
    public void eat() {  //吃東西方法的具體實現  } 
    public void sleep() { //睡覺方法的具體實現  } 
} 
 
public class Penguin  extends  Animal{ 
}

  implements關鍵字

    使用 implements 關鍵字可以變相的使java具有多繼承的特性,使用範圍為類繼承接口的情況,可以同時繼承多個接口(接口跟接口之間采用逗號分隔)。  

implements 關鍵字
public interface A {
    public void eat();
    public void sleep();
}
 
public interface B {
    public void show();
}
 
public class C implements A,B {
}

2、Java中構造器

   1、概念  

  又稱為 構造方法,constructor 構造器用於構造該類的實例。

  構造器是一個創建對象時被自動調用的特殊方法,為的是初始化。構造器的名稱應與類的名稱一致。 

  當創建一個個對象時,系統會該對象的屬性默認初始化,基本類型屬性的值為0(數值類型),false(布爾類型),把所有的引用類型設置為null.

構造器可以改變這種默認的初始化。

  2、構造器的語法格式的詳細說明

修飾符: 修飾符可以省略,也可以是public,protected,private其中之一
構造器名:構造器名必須和類名相同
形參列表:和定義方法形參列表的格式完全相同

指的指出的是,構造器不能定義返回值類型聲明,也不能聲明void定義構造器沒有返回值,

如果為構造器定義了返回值類型,或者使用了void定義構造器沒有返回值,編譯時不會出錯

但java會把這個所謂的構造器當做方法來處理

3、構造器與方法的不同

    技術分享

  4、應用

    實例演示:計算坐標點的距離

    實體類Point代碼:  

1 public class Point {
 2 
 3     // 點的屬性 橫縱坐標
 4     int x;
 5     int y;
 6     
 7     // 默認無參構造器 
 8     public Point(){
 9         System.out.println("默認構造。");
10     }
11     
12     // 有參構造1
13     public Point(int a,int b){
14         System.out.println("有參構造。");
15         // 給對象賦值 
16         x = a;
17         y = b;
18     }
19     // 有參構造2(重載)
20     public Point(int a){
21 //        System.out.println();
22         this(a,a); // 重載 調用上面的有參構造1(此語法專門用來構造方法間調用,必須寫在構造方法的第一行)
23     }
24     
25     /**
26      * 點距離的計算方法
27      * 參數分別為:無參 點坐標 點對象
28      * 方法重載
29      */
30     public double distance(){ // 無參
31         return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2)); // 到原點的距離
32     }
33     
34     // 到某個點的距離
35     public double distance(int a, int b){ // 參數為點坐標
36         return Math.sqrt(Math.pow(this.x-a, 2)+Math.pow(this.y-b, 2));
37     }
38     
39     public double distance(Point p){ // 參數為點對象
40         return distance(p.x, p.y);
41     }
42     
43 }

PrintDemo 

1 public class PointDemo {
 2     public static void main(String[] args) {
 3         
 4         Point p1 = new Point(3,2);
 5         System.out.println("p1的坐標是:" + "(" + p1.x + "," + p1.y + ")");
 6         
 7         Point p2 = new Point(5);
 8         System.out.println("p2的坐標是:" + "(" + p2.x + "," + p2.y + ")");
 9         
10         /**
11          * 求點到點的距離
12          */
13         Point p = new Point(6,8);
14         System.out.println("到原點的距離為:" + p.distance()); // 到原點的距離
15         System.out.println("到另一個點的距離為:" + p.distance(3, 3)); // 到(3,3)的距離 
16         System.out.println("到某個點對象的距離為:" + p.distance(p2)); // 到點對象p2的距離
17     }
18 }

  輸出為:

    有參構造。
    p1的坐標是:(3,2)
    有參構造。
    p2的坐標是:(5,5)
    有參構造。
    到原點的距離為:10.0
    到另一個點的距離為:5.830951894845301
    到某個點對象的距離為:3.1622776601683795

3、java中的this和super

  1、this關鍵字

    this 關鍵字表示當前對象。可用於:

    • 調用當前類的構造方法,並且必須是方法的第一條語句。如:this(); 調用默認構造方法。this(參數); 調用帶參構造方法。
    • 限定當前對象的數據域變量。一般用於方法內的局部變量與對象的數據域變量同名的情況。如 this.num = num。this.num 表示當前對象的數據域變量 num,而 num 表示方法中的局部變量。

   2、super 關鍵字

    super 表示使用它的類的父類。super 可用於:

    • 調用父類的構造方法;
    • 調用父類的方法(子類覆蓋了父類的方法時);
    • 訪問父類的數據域(可以這樣用但沒有必要這樣用)。

   調用父類的構造方法語法:   

super();  

或   

super(參數列表);

    註意:super 語句必須是子類構造方法的第一條語句。不能在子類中使用父類構造方法名來調用父類構造方法。 父類的構造方法不被子類繼承。

        調用父類的構造方法的唯一途徑是使用 super 關鍵字,如果子類中沒顯式調用,則編譯器自動將 super(); 作為子類構造方法的第一條語句。

          這會形成一個構造方法鏈。

        靜態方法中不能使用 super 關鍵字。

  調用父類的方法語法:

    super.方法名(參數列表);

    如果是繼承的方法,是沒有必要使用 super 來調用,直接即可調用。但如果子類覆蓋或重寫了父類的方法,則只有使用 super 才能在子類中調用父類中的被重寫的方法。

java基礎知識--繼承