中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

java的(de)組合(he)和繼(ji)承

其實我第一次學習java 的時候根本沒有聽說過組合這個名詞,老師也更沒有講解過,我一直以為是我自己落掉了什么知識點,其實不是的,組合這個名詞暫且把它定義為一個思維性的東西吧,相信讀者都接觸過了,但是并不知道它還有這個名字。
其實所謂的組合就是創建一個新類去調用已經創建并且調試好的類,那么這個新類就可以把它叫做是一個組合
例(li)如我創建一(yi)個People

public class People {
	private String name;
	private int age;
	
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}
	public int getAge(){
		return this.age;
	}
	public void setAge(int age){
		this.age = age;
	}
}

那我現在要用這個類,我可以給這個類添加一些新的特性,這時候我們就可以創建一個新的類,然后在這個類里創建People的對象。
比如我現在創(chuang)建一個類叫做Student

class Student {
	People people = new People();
}

然后可以在這個類里添加一些屬性,比如定義個身份為student,在這里我就不在論述了。
接下來看看繼承,其實繼承和組合本就有異曲同工之妙,先來看看是怎樣繼承的。
在java里有一個叫做extends的關鍵字,它可以幫助我們繼承,被繼承的類我們稱作父類,也可以叫做基類,超類都行,而繼承者我們稱作子類或者派生類等等
這(zhe)里我們定(ding)義一個類(lei)

public class Student extends People{
    //doSomething
}

這樣一來的話,該類就繼承了父類的全部成員方法和成員變量,但是注意,聲明為private權限的字段或者方法是不會被繼承下來的。
為(wei)了(le)證明這一(yi)點我(wo)們在student類寫一(yi)個(ge)方法

public String re(){
	return this.name;
}

這(zhe)(zhe)里編譯器會報一個錯"People.name is not visible",從這(zhe)(zhe)里就可(ke)以看出,被聲明為private 的(de)字段或者方法是不能被繼承下(xia)(xia)來的(de),如果你(ni)想把它繼承下(xia)(xia)來,可(ke)以把private改成protected,這(zhe)(zhe)樣的(de)話,我(wo)們就能順利的(de)繼承下(xia)(xia)name字段。

這樣(yang)我們把People里的字段全部初始(shi)化一(yi)下(xia),只需在代碼里加上這一(yi)段代碼塊(kuai)就(jiu)行了

{
	this.age = 10;
	this.name = "zhangsan";
}

接下來在主函數(shu)里聲明出(chu)這個student

Student student = new Student();
System.out.println(student.getAge());

現在我們驚訝的發現這個寫法是可行的,盡管我們沒有在子類中聲明任何的字段和方法,我們依然可以調用getAge();并且可以順利的打印出10
這(zhe)是因為我們沒有在子類(lei)中(zhong)重(zhong)載(zai)任何(he)方法,所以此時(shi)調用(yong)的是父類(lei)的getAge,也就(jiu)可以輕松的訪問(wen)到父類(lei)的private聲明的字段(duan)了。

看完了這些相信大家對繼承已經有了一個初步的認識,那么在繼承機制中,各個類的構造方法又是怎么被調用的呢,答案是自父類到子類依次調用.
演示的(de)(de)同(tong)時我(wo)先聲明(ming)三個(ge)類Temp1、Temp2、Temp3,與此同(tong)時Temp3繼承(cheng)(cheng)自(zi)Temp2,而Temp2又繼承(cheng)(cheng)自(zi)Temp1,這樣的(de)(de)話,我(wo)們在(zai)各個(ge)類的(de)(de)構造方法(fa)里都放(fang)上一(yi)句(ju)打印(yin)的(de)(de)語句(ju)

//Temp1
System.out.println("i'm temp1");
//Temp2
System.out.println("i'm temp2");
//Temp3
System.out.println("i'm temp3");

為了方便我這里就這樣寫了,但是大家千萬要注意這些是放在各個類的構造方法里的。
我們在主(zhu)函(han)數(shu)里創建一個Temp3的(de)對象

public class Mian{
	public static void main(String[] args){
		Temp3 temp3 = new Temp3();
	}
}

我(wo)們看控(kong)制(zhi)臺,打印出了

i'm temp1
i'm temp2
i'm temp3

由(you)此可以看(kan)出先(xian)要(yao)創建temp3的對象,發(fa)現了extends關鍵(jian)字(zi)(zi),然(ran)后順著繼(ji)承鏈往(wang)(wang)上走,找到temp2,又發(fa)現extends關鍵(jian)字(zi)(zi),接著找到temp1,然(ran)后調用(yong)temp1的構造(zao)方法,接著往(wang)(wang)下挨個(ge)調用(yong)。

posted @ 2016-10-16 17:58  浩大王  閱讀(8696)  評論(0)    收藏  舉報