Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抽象派生类中的抽象方法重写/实现抽象基类的抽象或具体方法。如何以及为什么?_Java_Inheritance_Abstract Class_Overriding_Implements - Fatal编程技术网

Java 抽象派生类中的抽象方法重写/实现抽象基类的抽象或具体方法。如何以及为什么?

Java 抽象派生类中的抽象方法重写/实现抽象基类的抽象或具体方法。如何以及为什么?,java,inheritance,abstract-class,overriding,implements,Java,Inheritance,Abstract Class,Overriding,Implements,遇到了有趣的继承/重写问题(摘自) 当基类和派生类都是抽象类时 两者都有完全相同的抽象方法,或者 抽象基有具体的方法,派生基声明相同的方法抽象 我不明白为什么EclipseIDE在派生类中调用它 实现(它在派生中不提供代码/正文!) 重写(在派生中也不提供代码/正文!) 片段1: public abstract class Girl { abstract String getDescription(); } abstract class GirlDecorator extends

遇到了有趣的继承/重写问题(摘自)

当基类和派生类都是抽象类时

  • 两者都有完全相同的抽象方法,或者
  • 抽象基有具体的方法,派生基声明相同的方法抽象
  • 我不明白为什么EclipseIDE在派生类中调用它

  • 实现(它在派生中不提供代码/正文!)
  • 重写(在派生中也不提供代码/正文!)
  • 片段1:

    public abstract class Girl {
         abstract String getDescription();
    }
    
    
    abstract class GirlDecorator extends Girl {
           abstract String getDescription();  // implements Girl.getDescription() - says Eclipse IDE
    }
    
    public abstract class Girl {
        String description = "no particular";
    
          String getDescription() {
              return description;
          }
    }
    
    abstract class GirlDecorator extends Girl {
           abstract String getDescription();  // overrides Girl.getDescription() - says Eclipse IDE
    }
    
    片段2:

    public abstract class Girl {
         abstract String getDescription();
    }
    
    
    abstract class GirlDecorator extends Girl {
           abstract String getDescription();  // implements Girl.getDescription() - says Eclipse IDE
    }
    
    public abstract class Girl {
        String description = "no particular";
    
          String getDescription() {
              return description;
          }
    }
    
    abstract class GirlDecorator extends Girl {
           abstract String getDescription();  // overrides Girl.getDescription() - says Eclipse IDE
    }
    

    在Java中有两种类型的方法(非静态)

  • 虚-普通方法,必须在基类中实现,但可以由继承重写

  • 抽象-不是在基类中而是在派生类中实现的方法

  • 因此,虚拟方法不是在派生类中实现的,而是在基类中实现的,并且可以被派生类重写。
    抽象方法不是在基类中实现的,而是在派生类中实现的。

    您忘记了
    @Override
    注释。“Implements”是提供实现的“overrides”的特例。它可以用抽象方法重写。