題目地址:https://wenku.baidu.com/view/b42ce5680b4c2e3f57276394?ivk_sa=1023194j&qq-pf-to=pcqq.c2c
1
p.name到底能不能輸出?
答案是不能的,因爲Person中的name屬性是被private屬性修飾的。
private僅支持在本類中調用,所以在其他類中是無法引用的。
Person p = new Child()概念模糊
多態:
多態是繼封裝、繼承之後,面向對象的第三大特性。
現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的同學張三既是學生也是人,即出現兩種形態。
最終多態體現爲父類引用變量可以指向子類對象。
多態的前提是必須有子父類關係或者類實現接口關係,否則無法完成多態。
在使用多態後的父類引用變量調用方法時,會調用子類重寫後的方法。
多態-函數的變換:
public class Person {
private String name = "Person";
int age = 18;
public void hello(){
System.out.println("Person hello");
}
}
public class Child extends Person{
int age = 8;
public void hello(){
System.out.println("Child hello");
}
}
public class Main {
public static void main(String[] args) {
Person p = new Child();
//輸出成員函數
p.hello();
}
}
輸出結果爲:Child hello 輸出子類的
多態-成員的變換:
如果父類和子類的屬性都相同,那麼怎麼輸出結果呢?
public class Person {
private String name = "Person";
int age = 18;
public void hello(){
System.out.println("Person hello");
}
}
public class Child extends Person{
int age = 8;
public void hello(){
System.out.println("Child hello");
}
}
public class Main {
public static void main(String[] args) {
Person p = new Child();
//輸出成員數據
System.out.println(p.age);
}
}
輸出結果爲:18 輸出父類的。
2
super()必須在子類構造器方法的第一行,否則編譯不通過
子類構造器使用 super 調用父類的構造器時,需要放在首行,不然會編譯報錯。
3
答案是:D
首先this.name 它是在static main中的。
this只能在類中的非靜態方法中使用,靜態方法和靜態的代碼塊中絕對不能出現this
當子類的構造器調用super()的時候,只能在子類構造器的第一行。
4
爲什麼答案D是錯誤的?
構造器中的this調用和super調用都必須出現在構造器執行體的第一行,所以this調用和super調用不會同時出現
5
總結:雖然抽象類不能被實例化,但可以有構造函數。
6
7
這道題爲什麼輸出的是father?
成員變量是不存在重載一說的,只有方法可以重載。
Father.name 定義爲 private ,這是Father 自己的成員變量, 子類是取不到的
Test.Name 是 Test 自己的成員變量, 跟 Father.name 是兩個變量
然後 子類Test並沒有覆寫 Father 的getName方法
於是main函數調用的實際是Father的getName, 取的是Father.Name的值,自然就是輸出 “father”
8
爲什麼答案是編譯報錯?
我們手打代碼上去發現也是報錯的? 那麼爲什麼?
百度查看了一下try-catch的規則:
如果能捕獲多個異常,那麼先捕獲小異常,在捕獲大異常
9
super指代的是?
super不能在static方法中,在子類中指代父類的方法和域
子類不能跨越父類引用祖父。
子類使用super可引用父類的某些方法和屬性。
10
打開InputStreamReader的源碼
new InputStreamReader()的參數必須是InputStream類型(或其子類類型,如FileInputstream,且e.txt是一個文件(file),所以只能用FileInputstream讀入,而不能用DataInputstream,DataInputstream只能讀入簡單類型的變量)。
B讀入的是字符類型,不是字節(Stream)類型。
D讀入的是一個String的path,肯定不行
11
12
看一下運算符優先級。
可以看到是從右到左邊的。
i+=i-=i*=i
首先是i*=i 12*12 = 144
然後i值還是12 12-144 = -132
-132 + 12 = -120
13
Java事務的類型有三種:JDBC事務、JTA(Java Transaction API)事務、容器事務。
14
15
在結果集中 我們的索引是從1開始的。