這塊也不知道該怎麼總結,感受不少,但又不知道總結什麼。可能高手到必定境界無招勝有招吧,哈哈,自吹了。java
總結本身以爲比較出問題或者以前面試中影響比較深入的內容吧。面試
修飾符 | 當前類 | 同包內 | 子類 | 其餘類 |
---|---|---|---|---|
private | √ | - | - | - |
default | √ | √ | - | - |
protected | √ | √ | √ | - |
public | √ | √ | √ | √ |
public class Father { static { System.out.println("Father static"); } { System.out.println("Father {}"); } public Father() { System.out.println("Father()"); } } public class Son extends Father { static { System.out.println("Son static"); } { System.out.println("Son {}"); } public Son() { System.out.println("Son()"); } public static void main(String[] args) { Son son = new Son(); } }
打印結果:ide
重載是同一個類中,而重寫存在於子父類中。函數
知足條件:this
重寫code
首先子類修飾符可見範圍不能小於父類,返回值類型須要相同,方法名相同,方法的參數類型、個數、順序須要相同,固然參數名容許不一樣。對象
重載繼承
方法名必須相同,方法參數的類型、個數或者順序不能相同。注意:返回值類型不一樣(特別注意:返回值類型能夠是父類返回值類型的子類),其餘相同不能構成重載。圖片
public void sayHello(String name, Date time) { System.out.println("hello " + name + ",如今是" + time); } // 特別注意: // 返回值類型不一樣是沒法工程重載 public Date sayHello(String name, Date time) { System.out.println("hello " + name + ",如今是" + time); return time; } // 參數順序不一樣 public void sayHello(Date time, String name) { System.out.println("hello " + name + ",如今是" + time); } // 參數個數不一樣 public void sayHello(String name) { System.out.println("hello " + name); } // 參數類型不一樣 public void sayHello(String name, String context) { System.out.println("hello " + name + "," + context); }
private final List<String> list = new ArrayList<String>(); // 特別注意: // 錯誤的修改final修飾變量的引用 list = new ArrayList<String>(); // 能夠修改引用的內容 public void test() { list.add("A"); }
public class Student { // 爲了代碼簡約和正確性,不考慮對狀態的封裝 public String name; public int age; @Override public boolean equals(Object o) { // 1. 判斷引用的對象是否相同,相同則爲相等 if (this == o) return true; // 2. 判斷傳入對象是否爲空,由於調用equals的對象確定不爲空,若是object爲空,則確定不等 // 判斷傳入對象和this對象是否爲同一個類構建的對象,若是不是,則確定不等 if (o == null || getClass() != o.getClass()) return false; // 3. 若是是同一個類構建的對象,則能夠轉型爲相同類的對象,方便觀察其狀態是否相同 Student student = (Student) o; // 4. 觀察狀態是否相同。若是是基本數據類型,簡單粗暴的使用== 。若是是對象,則還須要使用equals方法判斷 if (age != student.age) return false; return name.equals(student.name); } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + age; return result; } }