1. 請(qǐng)寫出如下的輸出結(jié)果
public class Father {
int x = 1;
public Father() {
System.out.println("Father");
}
public Father(String s) {
System.out.println("Father" + s);
}
}
public class Son extends Father{
int x = 2;
public Son() {
System.out.println("Son");
}
public Son(String s) {
System.out.println("Son" + s);
}
}
public class Test {
public static void main(String[] args) {
Son f = new Son();
System.out.println(f.x);
}
}
2. 請(qǐng)寫出如下的輸出結(jié)果
public class Father {
int x = 1;
public Father() {
System.out.println("Father");
}
public Father(String s) {
System.out.println("Father" + s);
}
}
public class Son extends Father{
int x = 2;
public Son() {
System.out.println("Son");
}
public Son(String s) {
System.out.println("Son" + s);
}
}
public class Test {
public static void main(String[] args) {
Father f = new Son();
System.out.println(f.x);
}
}
3. 請(qǐng)寫出如下的輸出結(jié)果
public class Father {
int x = 1;
public Father() {
System.out.println("Father");
}
public Father(String s) {
System.out.println("Father" + s);
}
}
public class Son extends Father{
int x = 2;
public Son() {
System.out.println("Son");
}
public Son(String s) {
System.out.println("Son" + s);
}
}
public class Test {
public static void main(String[] args) {
Father f = new Son("hello");
System.out.println(f.x);
}
}
總結(jié):只要是new子類李剖,無(wú)論是調(diào)用子類的有參構(gòu)造還是無(wú)參構(gòu)造都會(huì)執(zhí)行父類的無(wú)參構(gòu)造德玫。當(dāng)子類和父類有同一個(gè)變量名字的變量時(shí)查刻,如果是使用了多態(tài)則調(diào)用的是父類的變量履肃。否則調(diào)用的是子類的變量荆残。
補(bǔ)充:執(zhí)行順序蕴潦,靜態(tài)塊>構(gòu)造語(yǔ)句塊>函數(shù)塊
4.作用域public,private,protected,以及不寫時(shí)的區(qū)別
5.Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)
匿名的內(nèi)部類是沒有名字的內(nèi)部類。不能extends(繼承) 其它類篡悟,但一個(gè)內(nèi)部類可以作為一個(gè)接口艳悔,由另一個(gè)內(nèi)部類實(shí)現(xiàn)
6. &和&&的區(qū)別
&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)
7.Math.round(11.5)等於多少? Math.round(-11.5)等於多少
Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數(shù)最接近的長(zhǎng)整數(shù)掘剪,參數(shù)加1/2后求其floor
8. short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)
答:short s1 = 1; s1 = s1 + 1; (s1+1運(yùn)算結(jié)果是int型扫腺,需要強(qiáng)制轉(zhuǎn)換類型)short s1 = 1; s1 += 1;(可以正確編譯)
9. 數(shù)組有沒有l(wèi)ength()這個(gè)方法? String有沒有l(wèi)ength()這個(gè)方法
答:數(shù)組沒有l(wèi)ength()這個(gè)方法岗照,有l(wèi)ength的屬性。String有有l(wèi)ength()這個(gè)方法
10. Overload和Override的區(qū)別笆环。Overloaded的方法是否可以改變返回值的類型
答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)攒至。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)躁劣。如果在子類中定義某方法與其父類有相同的名稱和參數(shù)迫吐,我們說(shuō)該方法被重寫 (Overriding)。子類的對(duì)象使用這個(gè)方法時(shí)账忘,將調(diào)用子類中的定義志膀,對(duì)它而言熙宇,父類中的定義如同被"屏蔽"了。如果在一個(gè)類中定義了多個(gè)同名的方法溉浙,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型烫止,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型
11.abstract class和interface有什么區(qū)別
答:聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class)戳稽,它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類馆蠕,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況惊奇。不能創(chuàng)建abstract 類的實(shí)例互躬。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類赊时,并讓它指向具體子類的一個(gè)實(shí)例吨铸。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn)祖秒,否則它們也是抽象類為。取而代之舟奠,在子類中實(shí)現(xiàn)該方法竭缝。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法
接口(interface)是抽象類的變體。在接口中沼瘫,所有方法都是抽象的抬纸。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的耿戚,沒有一個(gè)有程序體湿故。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似膜蛔,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為坛猪。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法皂股。然后墅茉,它可以在實(shí)現(xiàn)了該接口的類的任何對(duì)象上調(diào)用接口的方法。由于有抽象類呜呐,它允許使用接口名作為引用變量的類型就斤。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換蘑辑,instanceof 運(yùn)算符可以用來(lái)決定某對(duì)象的類是否實(shí)現(xiàn)了接口
12. 接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承實(shí)體類(concrete class)
接口可以繼承接口洋机。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類洋魂,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)
13. 構(gòu)造器Constructor是否可被override
答:構(gòu)造器Constructor不能被繼承绷旗,因此不能重寫Overriding喜鼓,但可以被重載Overloading
14.是否可以繼承String類
答:String類是final類故不可以繼承
15. 當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性刁标,并可返回變化后的結(jié)果颠通,那么這里到底是值傳遞還是引用傳遞
答:是值傳遞。Java 編程語(yǔ)言只有值傳遞參數(shù)膀懈。當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí)顿锰,參數(shù)的值就是對(duì)該對(duì)象的引用。對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變启搂,但對(duì)象的引用是永遠(yuǎn)不會(huì)改變的
16.char型變量中能不能存貯一個(gè)中文漢字?為什么?
答:是能夠定義成為一個(gè)中文的硼控,因?yàn)閖ava中以u(píng)nicode編碼,一個(gè)char占16個(gè)字節(jié)胳赌,所以放一個(gè)中文是沒問題的
17. 面向?qū)ο蟮奶卣饔心男┓矫?/h3>
1.繼承:
繼承是一種聯(lián)結(jié)類的層次模型牢撼,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法疑苫。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生熏版,這個(gè)過程稱為類繼承。新類繼承了原始類的特性捍掺,新類稱為原始類的派生類(子類)撼短,而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量挺勿,并且類可以修改或增加新的方法使之更適合特殊的需要曲横。
2.封裝:
封裝是把過程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問只能通過已定義的界面不瓶。面向?qū)ο笥?jì)算始于這個(gè)基本概念禾嫉,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象蚊丐,這些對(duì)象通過一個(gè)受保護(hù)的接口訪問其他對(duì)象熙参。
3.多態(tài)性:
多態(tài)性是指允許不同類的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性吠撮。多態(tài)性語(yǔ)言具有靈活尊惰、抽象、行為共享泥兰、代碼共享的優(yōu)勢(shì)弄屡,很好的解決了應(yīng)用程序函數(shù)同名問題。
18.一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)鞋诗?有什么限制膀捷?
答:可以。必須只有一個(gè)類名與文件名相同削彬。
19. 是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用全庸?
答:不可以,如果其中包含對(duì)象的method()秀仲;不能保證對(duì)象初始化.
20. 在JAVA中,如何跳出當(dāng)前的多重嵌套循環(huán)壶笼?
答:用break; return 方法神僵。