java constructor 在構造子類時,一定會調用到父類的構造方法 “ 私人屬性被繼承了?”問題

來源:互聯網
上載者:User

標籤:

 ” Error:Implicit super constructor Pet() is undefined. Must explicitly invoke another constructor  “

 記住一點:在構造子類時,一定會調用到父類的構造方法。因為父類中的元素也需要被初始化。 
所以父類要麼有一個預設的無參數構造,這樣Java會自動調用這個無參數的構造。如果父類沒有無參數的構造,那麼就要你自己在子類的構造中,通過super()的方式調用父類的構造。 

    參考代碼如下;

  1. package practise02_2;
  2. /*
  3. * 子類重寫父類方法
  4. */
  5. public class Pet {
  6. private String petName;
  7. private String ownerName;
  8. Pet(){}
  9. public Pet(String petName,String ownerName){
  10. System.out.println("wweqwq");
  11. this.petName=petName;
  12. this.ownerName=ownerName;
  13. }
  14. public void playWithOwner(){
  15. System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
  16. }
  17. public String getPetName() {
  18. return petName;
  19. }
  20. public void setPetName(String petName) {
  21. this.petName = petName;
  22. }
  23. public String getOwnerName() {
  24. return ownerName;
  25. }
  26. public void setOwnerName(String ownerName) {
  27. this.ownerName = ownerName;
  28. }
  29. }

 

  1. *********子類在執行個體化時,必須給父類變數初始化,即調用父類建構函式**********************
  2. package practise02_2;
  3. public class Cat extends Pet {
  4. private String petName;
  5. private String ownerName;
  6. public Cat(String petName, String ownerName) {
  7. //super(petName, ownerName); //注釋掉會報錯!為何??執行個體化子類時,父類中的屬性也需要初始化!!在父類添加無參數的構造方法後錯誤解決
  8. this.petName=petName;
  9. this.ownerName=ownerName;
  10. }
  11. public void playWithOwner(){
  12. System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
  13. }
  14. }

 

  1. **********  ”  父類的私人屬性可以被繼承???”  ********
  2. package practise02_2;
  3. public class Dog extends Pet{
  4. //值得注意的是:這裡雖然沒有定義子類屬性,但是並不代表子類繼承了父類的私人屬性
  5. //子類只是調用了父類的構造方法,執行個體化子類時,值傳給子類構造方法的形參
  6. //如下可驗證:子類構造方法的形參和父類不同,兩者之間沒任何關係
  7. public Dog(String a , String b ) {//形參而已,並無實際意義
  8. super(a, b);
  9. // TODO Auto-generated constructor stub
  10. }
  11. public void playWithOwner(){
  12. System.out.println(getPetName()+"正在和主人"+getOwnerName()+"玩耍");
  13. }
  14. }

 

  1. **************主函數***************
  2. package practise02_2;
  3. public class Test {
  4. public static void main(String[] args) {
  5. Cat cat=new Cat("阿花","Tom" );
  6. Dog dog=new Dog("旺財","Tom");
  7. cat.playWithOwner();
  8. dog.playWithOwner();
  9. }
  10. }
  11. **************運行結果***********

java constructor 在構造子類時,一定會調用到父類的構造方法 “ 私人屬性被繼承了?”問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.