【问题标题】:inheritance : How child class interact with its parent?继承:子类如何与其父类交互?
【发布时间】:2013-11-06 11:42:13
【问题描述】:

我有以下代码:

class Shoe {
    public Shoe(){
        this("thise a shoe");
        System.out.println("Base Class");
     }
    public Shoe(String s){
        System.out.println(s);
    }
}

class TennisShoe extends Shoe {
     public TennisShoe (){
           this("This is a Tennis Shoe");
           System.out.println("Derived Class");
      }
      public TennisShoe(String s){
           super("Exam 1");
           System.out.println(s);
    }
}

class WhiteTennisShoe extends TennisShoe {
     public WhiteTennisShoe(String s){
         System.out.println(s);
}
}

class Test{
   public static void main(String [] args){
       new WhiteTennisShoe("A White Tennis Shoe is Created");
    }

}

输出是:


考试 1

这是网球鞋

派生类

制作了一款白色网球鞋


我只是不明白为什么没有编译器来自

WhiteTennisShoe类中的构造函数public WhiteTennisShoe(String s)

TennisShoe 类中的构造函数 public TennisShoe (String s)

【问题讨论】:

    标签: java inheritance superclass


    【解决方案1】:

    在这个构造函数中

    public WhiteTennisShoe(String s){
         System.out.println(s);
    }
    

    您没有指定应该使用 TennisShoe 的哪个构造函数 - 没有 super 行。当你这样做时,编译器会自动选择不带参数的超类构造函数;如果没有可用的构造函数,这将是一个编译错误(尽管如果根本没有为超类定义构造函数,它将生成自己的构造函数)。

    所以被调用的TennisShoe构造函数是

    public TennisShoe (){
           this("This is a Tennis Shoe");
           System.out.println("Derived Class");
    }
    

    当然会调用另一个 TennisShoe 构造函数。

    【讨论】:

      【解决方案2】:

      因为,编译器总是调用带有子类构造函数的隐式super()方法。

      class Super{
       Super(){
       System.out.println("Super");
       }     
      }
      
      
      class Sub extends Super{
          Sub(){
           super();// this super will call implicitly if you call new Sub()
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-03-14
        • 1970-01-01
        • 1970-01-01
        • 2019-12-28
        • 2023-04-09
        • 2023-03-27
        • 1970-01-01
        • 2012-04-11
        • 1970-01-01
        相关资源
        最近更新 更多