Answers:
是的,您可以做到。您为什么不尝试这样做呢?
是的你可以。java中使用的抽象类表示您无法创建该类的对象。子类必须使用抽象方法来提供该方法的实现。
因此,您可以轻松定义一个抽象类,而无需任何抽象方法。
例如:
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
这可以。
是的,您可以声明仅使用已经具有实现的方法无法实例化的类。如果您想在将来添加抽象方法,或者即使该类没有抽象属性,也不想直接实例化该类,这将很有用。
是的,我们可以声明一个没有任何抽象方法的抽象类。将类声明为抽象的目的不是实例化该类。
所以两种情况
1)使用抽象方法的抽象类。
这些类型的类,我们必须从该抽象类继承一个类,并且必须重写该类中的抽象方法,例如:GenricServlet类
2)没有抽象方法的抽象类。
在这些类型的类中,我们必须从该抽象类继承一个类,例如:HttpServlet类的目的是,尽管如果您不在子类中实现逻辑,则可以获取父逻辑
是的,我们可以有一个没有抽象方法的抽象类,因为它们都是独立的概念。声明一个类抽象意味着它不能自己实例化,只能被子类化。声明方法摘要意味着将在子类中定义Method。
是的,您可以定义一个没有抽象方法的抽象类。但是,如果内部没有方法,则最好使用接口
是的你可以。有时您可能会被问到这个问题,这样做的目的是什么?答案是:有时我们必须限制类自己实例化。在这种情况下,我们希望用户扩展Abstract类并实例化子类。
您可以,在我看来,您的问题更多。从一开始,我就说没有一个一成不变的答案。针对您当前的情况做正确的事。
对我而言,继承意味着“是”关系。想象一下狗类,可以通过更专业的子类型(阿尔萨斯犬,贵宾犬等)进行扩展。在这种情况下,将狗类抽象化可能是正确的做法,因为子类型是狗。现在让我们想象一下,狗需要项圈。在这种情况下,继承是没有意义的:在狗和项圈之间建立“是”关系是无稽之谈。这绝对是一种“ has-a”关系,领子是协作对象。使项圈变得抽象以使狗可以拥有一只是没有意义的。
我经常发现没有抽象方法的抽象类实际上在表达一种“ has-a”关系。在这些情况下,我通常会发现无需使用继承就可以更好地分解代码。我还发现,没有抽象方法的抽象类通常是代码异味,至少应导致在代码审查中提出问题。
同样,这完全是主观的。在某些情况下,没有抽象方法的抽象类很有意义,这完全取决于解释和证明。为您所做的任何事情做出最佳决定。
实际上,如果抽象类没有任何抽象方法,那是没有意义的。抽象类就像父亲。这个父亲有一些特性和行为,当您小的时候想成为父亲的孩子时,父亲说这个孩子(您)必须是这种方式,这就是我们的MOTO,如果您不想做,您会不是我的孩子。
WindowDecorator
和CoffeeDecorator
是abstract
类,但既不包括abstract
方法。