zoukankan      html  css  js  c++  java
  • java constructor 在构造子类时,一定会调用到父类的构造方法 “ 私有属性被继承了?”问题

     ” 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. **************运行结果***********
  • 相关阅读:
    [SDOI2015] 序列统计
    [BZOJ3514] Codechef MARCH14 GERALD07加强版
    [CF1082E] Increasing Frequency
    [CF1093G] Multidimensional Queries
    [HNOI2013] 切糕
    [HEOI2017] 寿司餐厅 + 最大权闭合子图的总结
    [BZOJ3771] Triple
    [HEOI2016] 字符串
    [总结] 后缀数组学习笔记
    [Luogu 3613] 睡觉困难综合征
  • 原文地址:https://www.cnblogs.com/yangyi9343/p/4741449.html
Copyright © 2011-2022 走看看