java基礎知識--繼承
繼承
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基礎知識--繼承