我是Java的新手,我无法理解如何不实现抽象类A到类C的所有方法。在我的示例中,我不想在类C中实现方法1.谢谢帮助!
public abstract Class A
{
public abstract boolean method1(Sting _str);
public abstract void method2();
public abstract A getA(Sring str);
}
public abstract class B extends A
{
\\ ..
}
public class C extends B
{
public void method2()
{
\\...
}
public A getA(String _str)
{
....
}
//here I don't want to implement method 1
}
public Class D extends B
{
public boolean method1(String _str)
{
//...
}
public void method2(String _str)
{
//...
}
public A getA()
{
//...
}
}
答案 0 :(得分:1)
必须在类层次结构中的某处实现抽象方法。
在你的样本中,你必须在B或C中实现它。没有办法解决它。
答案 1 :(得分:0)
使用抽象关键字时,您需要了解的几点
当一个类包含一个或多个抽象方法时,类应该被声明为abstract
使用抽象类时,您无法创建抽象类的对象,因为它未完全定义
抽象类的任何子类必须在超类中实现所有抽象方法,或者本身是抽象的
答案 2 :(得分:0)
已经给出了许多答案,其中大部分都是正确的。但是,我可以预见到这个问题更多的是关于基础知识,而不是代码问题。
首先,您需要了解这一点:
从超类继承会使您的代码“紧密耦合”,因此不需要怀疑需要哪种asbtract方法,或者最终会造成大混乱!
从抽象超类继承的子具体类必须实现所有抽象方法!否则它必须是一个抽象类。
如果您需要默认行为,则需要在界面上使用asbtract类。
意思是你必须计划好了!好吧,这并不意味着你不能有更轻松的类设置,例如你的代码不会从继承等机制中获得太多的支持。
您可以使用界面和/或组合提供相同的结果。如果您需要更多地改变您的设计,请将其设为界面。但是,您可能有抽象类提供一些默认行为,如前所述...
抽象类可以具有具体方法,而接口不能!
您需要了解的另一件事是,您只能继承一个类,但是您可以实现尽可能多的接口!这显然是我的一条路径......许多程序员将Java称为一种糟糕的编程语言,但许多程序员需要理解Java不是继承!所以我的建议是停止使用基于asbtract /具体类的继承作为义务!
最后利用简单的技术为您的工作提供动力;阅读有关依赖注入和组合的内容,例如!
下面的示例仅作为基于asbtract类实现继承的正确方法。
我希望它可以帮助你理解基础知识......有趣的编程!
基于asbtract类的代码示例:
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());
}
}
答案 3 :(得分:-1)
实现它并在其中抛出UnsupportedOperationException:
collections:
uploads:
title: Uploads
output: true
posts:
title: posts
output: true