必须在类层次结构中的某个地方实现抽象方法。
在您的样本中,您必须在B或C中实现它。 themple templet并在其中投掷一个无支撑的exception:public boolean method1(String _str){
throw new UnsupportedOperationException("message...");
}
给出了许多答案,其中大多数确实是正确的。但是,我可以预见,这个问题更多地是关于基本知识而不是代码问题。 首先,您需要理解这一点:
从超级类别中介绍您的代码“紧密结合”,因此毫无疑问需要使用哪种杂项方法,或者您最终会遇到一个大混乱!
从抽象超级类继承的子混凝土类必须实现所有抽象方法!否则,它必须是一个抽象类。
表示您必须提前计划!好吧,这并不意味着您不能有更轻松的课程,例如,您的代码并不能从诸如继承等机制中提供那么多的内容。
您可以使用接口和 /或组合物提供相同的结果。如果您需要比您想象的要更改设计,请将其设置为接口。但是,您可能有抽象类,可以提供一些默认行为,如我之前所说的...基于Asbarts类的代码示例:
public abstract class AShape {
public abstract double calculateArea();
public abstract double calculatePerimeter();
}
public class Circle extends AShape {
private double radius;
Circle(double radius){
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * Math.pow(this.radius, 2);
}
@Override
public double calculatePerimeter() {
return Math.PI * (this.radius * 2);
}
//you can add more concrete methods here if you need
}
public class Rectangle extends AShape {
private double side;
Rectangle(double side){
this.side = side;
}
@Override
public double calculatePerimeter() {
return 4*this.side;
}
@Override
public double calculateArea() {
return Math.pow(this.side, this.side);
}
}
//主班
public class Main {
public static void main(String[] args) {
Rectangle box = new Rectangle(2);
System.out.printf("Box area is: %.2f\n", box.calculateArea());
System.out.printf("Box perimeter is: %.2f\n", box.calculatePerimeter());
Circle disc = new Circle(2);
System.out.printf("Disc area is: %.2f\n", disc.calculateArea());
System.out.printf("Disc perimeter is: %.2f\n",disc.calculatePerimeter());
}
}
使用抽象关键字时,您需要了解一些要点
当一个类包含一个或多个抽象方法类时,也应声明抽象
当使用抽象类的过程中,您无法创建抽象类的对象,因为它未完全定义
任何抽象类的子类都必须在超级类中实现所有抽象方法,或者是摘要
抽象类可以从子类继承吗?对于ex:我在这个具体的班级教师中有这种方法callteacher(),我的抽象类可以继承为抽象方法吗?