1. 程式人生 > 其它 >Java基礎 類的繼承關係

Java基礎 類的繼承關係

技術標籤:java程式設計自學java

Java類的擴充套件

*當我們建立一個Java project,這個專案名和包都可以命名為demo,在這個包中建立我們需要的類,來完成某些功能。但這遠遠不夠,當我們需求變得更多的時候。Java類的擴充套件是一個非常好的解決問題方法。
或者說Java類的繼承
*

package dome;

public class CD extends Item {
	//extends擴充套件,CD就是Item的一個子類,通過派生,繼承
	//CD中的屬性動作
//	private String title;
	private String artist;
	private
int numbofTracks; // private int playingTime; // private boolean gotIt = false; // private String comment; //屬性構造 public CD(String title, String artist, int numbofTracks, int playingTime, String comment) { super(title,playingTime,false,comment); //構造 // this.title = title; //this一般指的是類CD
this.artist = artist; this.numbofTracks = numbofTracks; // this.playingTime = playingTime; // this.comment = comment; }

程式碼中能看到類CD擴充套件類Item,也可以說子類CD繼承父類Item
但是也要注意:

  1. 子類和父類的關係,屬性訪問並不繼承;
  2. 當我們去構造一個子類的物件的時候,他首先要確保它的父類所擁有的那些成員變數得到恰當的初始化;
  3. 所謂父類中的初始化:1定義初始化,2構造器,若這兩個模組同時存在,先做定義初始化;
  4. 如果父類和子類都有定義初始化和構造器,先開始執行父類中的程式,在做子類中的程式;

父類Item

物件變數和屬性

package dome;

public class Item {
    //定義	子類中的公共屬性
	private String title;                              
	private int playingTime;
	private boolean gotIt = false;
	private String comment;
	//構造初始化這些屬性
	public Item(String title, int playingTime, boolean gotIt, String comment) {
		super();
		this.title = title;
		this.playingTime = playingTime;
		this.gotIt = gotIt;
		this.comment = comment;
	}

父類和子類的關係:

  1. 類定義了型別,子類定義了子型別
  2. 子類的物件可以被當作父類的物件來使用:1賦值給父類的變數2傳遞給需要父類物件的函式3放進存放父類物件的容器;
  3. 子類的物件可以傳遞給需要父類的物件的函式,子類物件可以賦值給父類的變數,變數只是物件的一個管理者;

容器的定義

需要一個類對容器的定義,方便父類中的變數執行後續操作對子類中的物件和屬性。
子類的物件可以放在存放父類物件的容器中;

package dome;

import java.util.ArrayList;

public class Database {
//	private ArrayList<CD>listCD = new ArrayList<CD>(); //容器CD唱片
	private ArrayList<Item>listItem = new ArrayList<>();  //做一個新類Item
	
//	public void add(CD cd)                     //新增資料
//	{
//		listCD.add(cd);
//	}
	
	public void add(Item item)               //item多型變數,Item是item的宣告型別,一般是靜態的
	{
		listItem.add(item);
	}
	
	public void list()                       //表單中的所有資料
	{
//		for(CD cd:listCD) 
//		{
//			cd.print();
//		}
		for(Item item : listItem)             //for each迴圈,變數item只是一個管理者
		{
			item.print();                     //輸出各個子類中的物件     
			System.out.println();
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Item item = new Item();
		CD cd = new CD("b","h",5, 60,"sdfsefg");
		item = (Item)cd;           //造型
		//CD cc =(CD)item;     //強制,但不是型別轉換	
		Database db = new Database();
  • Java的物件變數是多型的,他們能儲存不止一種型別;
  • 他們可以儲存的是宣告型別的物件,或宣告型別的子類的物件;
  • 把子類的物件賦給父類的變數的時候,就發生了向上的造型;

向上造型

造型cast:子類物件可以賦值給父類的變數,但注意!Java中不存在物件對物件的賦值!,父類的物件不能賦值給子類的變數!
Vechicle v; 父類
Car c = new Car; 子類
v = c ;可以
c = v ;錯誤,只能向上造型
可以用造型: c = (Car)v;(只有當v這個變數實際管理的是Car才行)
向上造型,拿一個子類的物件,當作父類的物件來用
向上造型是預設的,不需要運算子,向上造型總是安全的

Java類的繼承總結

  1. 繼承是面向物件最顯著的一個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力。
  2. Java繼承是使用已存在的類的定義作為基礎建立新類的技術,新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。
  3. 這種技術使得複用以前的程式碼非常容易,能夠大大縮短開發週期,降低開發費用。比如可以先定義一個類叫車,車有以下屬性:車體大小,顏色,方向盤,輪胎,而又由車這個類派生出轎車和卡車兩個類,為轎車新增一個小後備箱,而為卡車新增一個大貨箱。

繼承就是子類繼承父類的特徵和行為,使得子類物件(例項)具有父類的例項域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

Java繼承是面向物件的最顯著的一個特徵。繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力。
類和類之間的繼承關係可以用UML符號表示,其中父類又叫超類或基類,子類又叫派生類。父類是子類的一般化,子類是父類的特化(具體化)。
JAVA不支援多繼承,單繼承使JAVA的繼承關係很簡單,一個類只能有一個父類,易於管理程式,同時一個類可以實現多個介面,從而克服單繼承的缺點。

構造器

子類是不繼承父類的構造器(構造方法或者建構函式)的,它只是呼叫(隱式或顯式)。
如果父類的構造器帶有引數,則必須在子類的構造器中顯式地通過super關鍵字呼叫父類的構造器並配以適當的引數列表。
如果父類構造器沒有引數,則在子類的構造器中不需要使用super關鍵字呼叫父類構造器,系統會自動呼叫父類的無參構造器。