問題描述:java
變量(或者叫作類的屬性),在繼承的狀況下,若是父類和子類存在同名的變量會出現什麼狀況?數組
答案:ide
一、變量的類型影響屬性的取值。函數
二、修飾符(protected、public、friendly)不影響屬性覆蓋。this
三、final_var常量能夠覆蓋。spa
四、var_變量(除去private)不可覆蓋。.net
五、static_var靜態變量、static_final靜態常量(二者都屬於類)不可覆蓋。翻譯
java裏面分爲4類權限:friendly、private、protected、public設計
friendly權限:code
不加任何權限修飾符,在同一個包中能夠訪問。即便是子類,若是不在同一個包中也沒法訪問。
private權限:
私有權限,用private來修飾,只有這個類能夠訪問,其它類(即便是子類)都不能夠訪問。
protected權限:
繼承訪問權限,這個類及其子類能夠訪問。同時protected權限還提供包訪問權限,就是在同一個包下面均可以訪問。
public權限:
公共權限,即最開放的權限,能夠隨意訪問。
註釋:靜態常量排在最前面。。。測了下。。。沒得出什麼結果。。。
一、{靜態常量} > {靜態變量 、靜態初始化快} > {變量 、初始化塊} > 構造函數
二、在遵照1的前提下,按照定義順序初始化
三、在遵照1 & 2 的前提下,按照
父類的 {靜態變量,靜態初始化塊}
子類的{靜態變量,靜態初始化塊}
父類的{ 變量、初始化塊}
父類構造函數
子類的{ 變量、初始化塊}
子類的構造函數
一、基本類型變量:char、byte、short、int、long、float、double、boolean
二、引用類型變量:類、接口、數組
結論:
一、基本類型和基本類型變量被看成參數傳遞給方法時,爲值傳遞。在方法體中,沒法給變原變量賦新值,也沒法改變它的值。
二、 對象和引用型變量被看成參數傳遞給方法時,在方法體中,沒法給原變量賦新值。可是能夠改變引用所指對象的屬性。
面向對象三特徵:封裝、多態、繼承(組合)
繼承的好處是複用原有類。除了繼承Inhericance外,還能夠經過組合Composition的方式複用類。 若是存在一種IS-A的關係,而且一個類須要向另外一個類暴露全部的方法接口,那麼更應該用繼承。 若是存在一種HAS-A的關係,那麼更應該運用組合。
interface Attack { public void move(); public void attack(); } class AttackImpl implements Attack { private String move; private String attack; public AttackImpl(String move, String attack) { this.move = move; this.attack = attack; } @Override public void move() { System.out.println(move); } @Override public void attack() { move(); System.out.println(attack); } }
class Insect { private int size; private String color; public Insect(int size, String color) { this.size = size; this.color = color; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } }
class Bee extends Insect implements Attack { private Attack attack; public Bee(int size, String color, Attack attack) { super(size, color); this.attack = attack; } public void move() { attack.move(); } public void attack() { attack.attack(); } }
Java類分爲:
一、類:使用class定義,不包含抽象方法
二、抽象類:使用absract class定義的類,能夠不包含抽象方法
三、接口:使用interface定義的類
Java類的繼承規律:
一、類能夠繼承(extends)類,能夠繼承(extends)抽象類,能夠繼承(implements)接口。
二、抽象類能夠繼承(extends)類,能夠繼承(extends)抽象類,能夠「繼承」(implements)接口。
三、接口只能繼承(extends)接口。
四、類(類、抽象類)是單一繼承;接口容許多繼承接口;類和抽象類容許實現多個接口。
五、抽象類繼承抽象類、接口,容許缺省實現父級的abstract方法、接口。
六、類繼承抽象類或者實現接口,必須所有實現抽象類的抽象方法,或者父級接口的所有接口。
類的多繼承缺點: 一、若是多繼承,當父類方法重名,會產生歧義 二、若是多繼承,當父類方法重名,子類沒有overwrite,會產生歧義 接口能夠用來設計多繼承,同時接口能夠避免上述問題
繼承是多態得以實現的基礎。多態就是一種類型表現出多種狀態。
一個方法調用同這個方法所屬的主體(也就是對象或類)關聯起來叫作綁定,分前期綁定和後期綁定。
1. 前期綁定:
在程序運行以前進行綁定,由編譯器和鏈接程序實現,又叫作靜態綁定。好比static方法和 final
方法,注意,這裏也包括private方法,由於它是隱式final的。
2. 後期綁定:
在運行時根據對象的類型進行綁定,由方法調用機制實現,所以又叫作動態綁定,或者運行 時
綁定。除了前期綁定外的全部方法都屬於後期綁定。
多態就是在後期綁定這種機制上實現的。多態消除了類之間的耦合關係,使程序更容易擴展。
重載和重寫都是針對方法的概念。方法的型構(英文名是signature,有的譯做「簽名」,雖然它被使用的較爲普遍,可是這個翻譯不許確的)。型構就是指方法的組成結構,具體包括方法的名稱和參數,涵蓋參數的數量、類型以及出現的順序,可是不包括方法的返回值類型,訪問權限修飾符,以及abstract、static、final等修飾符。好比下面兩個就是具備相同型構的方法
public void method(int i, String s) { // do something } public String method(int i, String s) { // do something }
重寫,英文名是overriding,是指在繼承狀況下,子類中定義了與其基類中方法具備相同型構的新方 法,就叫作子類把基類的方法重寫了。這是實現多態必須的步驟。 重載,英文名是overloading,是指在同一個類中定義了一個以上具備相同名稱,可是型構不一樣的方 法。在同一個類中,是不容許定義多於一個的具備相同型構的方法的。