Java常見面試題(2)

面向對象的特征有哪些方面:

1. 抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節(jié)。抽象包括兩個方面,一是過程抽象,二是數(shù)據(jù)抽象。

2.繼承:
繼承是一種聯(lián)結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。新類 繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,并且類可以修改或 增加新的方法使之更適合特殊的需要。

3.封裝:
封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向對象計算始于這個基本概念,即現(xiàn)實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。

4. 多態(tài)性:
多態(tài)性是指允許不同類的對象對同一消息作出響應。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應用程序函數(shù)同名問題。

在JAVA中基本數(shù)據(jù)類型參數(shù)的傳值和引用類型的參數(shù)傳值有什么不同?

一個是儲存在棧里,一個是存儲在堆棧里;一個是值類型的傳遞,一個是引用類型的傳遞;
基本型是傳值的拷貝,對象是傳引用的拷貝。
public class TestReference {

private int a=0;

public static void main(String[] args) {
int b = 0;
TestReference test = new TestReference();
test.modify(b);
test.modify(test);
System.out.println("After been modified b="+b);//傳值類型,不改變值,所傳的為變量的副本
System.out.println("After been modified a="+test.a);//引用類型改變所引用內(nèi)容,傳遞的是只引用的一個副本
}
//傳值類型
public void modify(int a){
a++;
System.out.println("It is modifying");
}
//引用類型
public void modify(TestReference t){
t.a++;
System.out.println("It is modifying");
}
}

北大青鳥網(wǎng)上報名
北大青鳥招生簡章