1. 程式人生 > >#java 一個簡單的例子理解java繼承、成員函式重寫、型別轉換

#java 一個簡單的例子理解java繼承、成員函式重寫、型別轉換

一個簡單的例子理解java繼承、成員函式重寫、型別轉換

1、繼承簡介
舉一個簡單的例子:筆分為很多種,比如毛筆、鋼筆、圓珠筆等等,這些筆都有一些相同的屬性比如長度、筆跡的粗細等等;但他們也有不同的特點,比如他們的用途(毛筆可以寫對聯、鋼筆可以寫作業等等)等。這時候要編寫一個程式用類表示這些筆,一般的方法就必須把各種筆的眾多相同的屬性重複寫很多次,就很浪費時間。這時候就可以藉助繼承,先寫一個擁有所有筆共同點的類,再分別寫每一種筆的類,讓其繼承這個共同類即可。

先寫一個筆的類:

public class pen {
	//定義長度
    private int length;
    //定義品牌
    private String brand;
    //定義筆跡的粗細
    private int width;
    public void setLength(int l){
    	length = l;
    }
    public int getLength(){
      	return length;
    }
    public void setBrand(String b){
      	brand = b;
    }
    public String getBrand(){
      	return brand;
    }
    public void setWidth(int w){
      	width = w;
    }
    public int getWidth(){
      	return width;
}
public void write(){
      	System.out.println("寫了一個字");
} 
}

這時候寫毛筆的類的時候,對於筆的共同屬性就只需要先用extends關鍵字繼承,再寫其特有的屬性和方法即可。(繼承的格式class 子類/派生類 extends 父類/基類/超類 ,基類/父類/超類 就是擁有共同屬性和方法的類, 子類/派生類則是從父類繼承過來,擁有它自己特有的屬性和方法的類。)

public class inkBrush extends pen{
    public void writeCouplet(){
    	System.out.println("寫了一副對聯");
    }
}

同樣,鋼筆類也只需先繼承再寫鋼筆獨有的屬性和方法。

public class pencil extends pen{
    public void doHomework(){
    	System.out.println("完成了一次作業。");
    }
}

2、關於類類裡面可以被繼承的部分
Java裡面的子類可以繼承父類的所有屬性和方法,只不過不能直接訪問私有成員,預設的成員不能跨包繼承。

3、關於方法的重寫
不同的筆都可以寫字,但不同的筆寫出的子是不一樣的。這時候就需要在各種筆的子類裡重寫write方法,如下所示:

public class pencil extends pen{
    public void write(){
        System.out.println("用鋼筆寫了一個字");
    }
}

子類裡重寫的方法必須和父類裡的方法的關鍵字、方法名、方法裡的引數個數以及每一個引數的屬性都必須相同。不然就成了方法的過載。

3、關於類的型別轉換
每種筆都可以用來寫字。當一個學生用鋼筆寫字的時候,我們可以說“他在用鋼筆寫字”,也可以說“他在用筆寫字“。用類表示如下:
寫一個學生類:

public class student {
	public void write(pen p){
		p.write();
	}
}

主函式裡面:

public class Manage {
    public static void main(String [] args){
        student stu1 = new student();
        pencil p1 = new pencil();
        stu1.write(p1);    	
    }
}

學生類的doHomework方法裡的引數是pen的型別,主函式裡student物件stu1的doHomework方法裡的引數是pencil,但並沒有報錯。這說明pencil自動轉換為了pen物件。
自動型別轉換隻能從子類轉換為父類,不能從父類轉換為子類,從父類轉換為子類必須使用強制型別抓換。

一個學生在寫作業的時候,我們可以說“他用鋼筆寫作業”,也可以不用說明他用什麼筆寫作業,直接說“他用筆寫作業”。用類表示如下:

寫一個學生類:

public class student {
    public void doHomework(pen p){
     	p.doHomework();
    }
}

如果按照上述寫法會報錯,這是因為pen這個類沒有doHomework的方法,doHomework時pen的派生類pencil裡的方法。著也說明pen類的物件無法轉換成pencil類物件。這時候可以採用強制型別轉換(強制型別轉換的格式: 轉換前的類名 轉換前的物件名 = (轉換後的類名)需轉換的物件名)。如下所示:

public class student {
    public void doHomework(pencil p){
     	p.doHomework();
    }
}