一、繼承有什麼用?
答:繼承使得你可以定義一個通用的類(父類或超類、基類),之後擴充該類爲一個更加特定的類(子類或派生類、導出類)。
二、如何判斷是否爲繼承關係?
答:《JAVA編程思想》第四版P38中提到——基類和導出類之間的關係稱爲is-a (是一個)關係,因爲可以說“一個圓形就是一個幾何形狀”判斷是否繼承,就是要確定是否可以用is-a來描述類之間的關係,並使之具有實際意義。
三、繼承關鍵字:extends
四、繼承中的super關鍵字。
super:指當前對象的超類對象
(1)super()--------------- 用來調用超類的構造方法。
(2)super.方法名()------用來調用超類的方法。(一般用在方法的重寫之中,下一篇會講到。)
(3)super.成員變量名--------用來調用超類的成員變量。
eg:
class Animal{ String name;//超類成員變量.... int age; Animal(String name){ this.name = name; } void eat(){//定義超類方法 System.out.println(name+"eat food...."); } } class Tiger extends Animal{ Tiger(String name){ super(name);//此處會調用超類帶參的構造方法. } void eat(){ super.eat();//調用超類的方法 System.out.println("name: "+name+",age: "+super.age);//調用到超類的成員變量 } }
五、子父之間的構造方法調用關係。
子類會創建對象時會默認的調用父類的無參構造方法,原因是在子類構造方法中JVM會默認給我們添加一個隱藏的super()即便我們不去寫它。
eg:
public class A { A(){ } } class B extends A{ B(){ //super(); 隱藏存在的. } }
值得注意的是,如果在父類中我們聲明瞭帶參的構造方法時,這時候JVM不會去給我們在父類中默認出一個無參的構造方法,這時候我們在創建子類對象時要主動去聲明去調用父類中的哪一個構造方法否則會出現編譯錯誤。
eg:
public class A { A(String name){ this.name = name; } } class B extends A{ B(String name){ super(name); } }
另外值還有兩點是:
(1)this()和super()只能在構造方法存在一個,this()代表的是調用本類對象的其他構造方法和super()則是調用父類的構造方法。並且super()和this()在使用時必須要方法構造方法的第一行。
(2)this()和super()都是指向對象的,所以不能在static 環境中使用。
第一次寫自己在學習中的筆記吧,也算是一些心得,包括自己的問題和班上同學們發現的問題,希望各位大佬能夠指點指點。