標籤:
” Error:Implicit super constructor Pet() is undefined. Must explicitly invoke another constructor “
記住一點:在構造子類時,一定會調用到父類的構造方法。因為父類中的元素也需要被初始化。
所以父類要麼有一個預設的無參數構造,這樣Java會自動調用這個無參數的構造。如果父類沒有無參數的構造,那麼就要你自己在子類的構造中,通過super()的方式調用父類的構造。
參考代碼如下;
- package practise02_2;
- /*
- * 子類重寫父類方法
- */
- public class Pet {
- private String petName;
- private String ownerName;
- Pet(){}
- public Pet(String petName,String ownerName){
- System.out.println("wweqwq");
- this.petName=petName;
- this.ownerName=ownerName;
- }
- public void playWithOwner(){
- System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
- }
- public String getPetName() {
- return petName;
- }
- public void setPetName(String petName) {
- this.petName = petName;
- }
- public String getOwnerName() {
- return ownerName;
- }
- public void setOwnerName(String ownerName) {
- this.ownerName = ownerName;
- }
- }
- *********子類在執行個體化時,必須給父類變數初始化,即調用父類建構函式**********************
- package practise02_2;
- public class Cat extends Pet {
- private String petName;
- private String ownerName;
- public Cat(String petName, String ownerName) {
- //super(petName, ownerName); //注釋掉會報錯!為何??執行個體化子類時,父類中的屬性也需要初始化!!在父類添加無參數的構造方法後錯誤解決
- this.petName=petName;
- this.ownerName=ownerName;
- }
- public void playWithOwner(){
- System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
- }
- }
- ********** ” 父類的私人屬性可以被繼承???” ********
- package practise02_2;
- public class Dog extends Pet{
- //值得注意的是:這裡雖然沒有定義子類屬性,但是並不代表子類繼承了父類的私人屬性
- //子類只是調用了父類的構造方法,執行個體化子類時,值傳給子類構造方法的形參
- //如下可驗證:子類構造方法的形參和父類不同,兩者之間沒任何關係
- public Dog(String a , String b ) {//形參而已,並無實際意義
- super(a, b);
- // TODO Auto-generated constructor stub
- }
- public void playWithOwner(){
- System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
- }
- }
- **************主函數***************
- package practise02_2;
- public class Test {
- public static void main(String[] args) {
- Cat cat=new Cat("阿花","Tom" );
- Dog dog=new Dog("旺財","Tom");
- cat.playWithOwner();
- dog.playWithOwner();
- }
- }
- **************運行結果***********
java constructor 在構造子類時,一定會調用到父類的構造方法 “ 私人屬性被繼承了?”問題