我可以在不添加抽象方法的情况下定义抽象类吗?
答案 0 :(得分:143)
当然。
声明一个类抽象只意味着你不允许它自己实例化。
声明方法抽象意味着子类必须为该方法提供实现。
这两个是不同的概念,但显然你不能在非抽象类中使用抽象方法。你甚至可以使用final
方法的抽象类,但从不相反。
答案 1 :(得分:14)
是的,你可以做到。你为什么不尝试这样做?
答案 2 :(得分:8)
是的,你可以。 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);
}
}
这很好。
答案 3 :(得分:5)
YES您可以使用任何抽象方法创建抽象类,没有抽象方法的抽象类的最佳示例是HttpServlet
Abstract Method是一个没有body的方法,如果你在类中声明了至少一个方法,那么如果你声明抽象类并不强制在类中声明抽象方法,则必须将该类声明为一个抽象强制BUT。
您无法创建抽象类的对象,这意味着它无法实例化。
答案 4 :(得分:4)
是的,您可以声明一个只能通过已经实现的方法自行实例化的类。如果您希望将来添加抽象方法,或者您不希望直接实例化该类,即使它没有抽象属性,这将非常有用。
答案 5 :(得分:3)
是的,我们可以有一个没有抽象方法的抽象类,因为它们都是独立的概念。声明一个类抽象意味着它不能单独实例化,只能被子类化。声明方法抽象意味着将在子类中定义Method。
答案 6 :(得分:3)
所以两个案例
1)抽象类的抽象类。
这些类,我们必须从这个抽象类继承一个类,并且必须覆盖我们类中的抽象方法, 例如:GenricServlet类
2)没有抽象方法的抽象类。
这些类,我们必须从这个抽象类继承一个类, 例如:HttpServlet类 这样做的目的虽然如果你没有在子类中实现你的逻辑,你可以得到父逻辑
答案 7 :(得分:2)
是的,您可以在没有抽象方法的情况下定义抽象类。但是,如果内部没有方法,最好使用接口
答案 8 :(得分:2)
是的,你可以做到。
声明类抽象意味着该类不会被任何其他类实例化。
并且内部至少应该有一个抽象方法,如果你没有声明方法而不是ok,你可以在该类中声明抽象方法。
示例:
public abstract class abs {
protected int cx = 0, cy = 0;
public void p() {
System.out.print("hello");
}
}
这肯定会有用。
答案 9 :(得分:1)
你可以,我心中的问题是你应该做的更多。从一开始,我就说没有硬性和快速的答案。为你目前的情况做正确的事。
对我而言,继承意味着一个' is-a'关系。想象一下狗类,可以通过更专业的子类型(阿尔萨斯,贵宾犬等)进行扩展。在这种情况下,使狗类抽象可能是正确的事情,因为子类型是狗。现在让我们想象狗需要领子。在这种情况下,继承没有意义:拥有一个' is-a'是无意义的。狗和项圈之间的关系。这肯定是一个' has-a'关系,领子是一个合作的对象。制作衣领抽象,以便狗可以有一个没有意义。
我经常发现没有抽象方法的抽象类实际上是在表达一个“a-a'关系。在这些情况下,我通常会发现在不使用继承的情况下可以更好地考虑代码。我还发现没有抽象方法的抽象类通常是代码气味,至少应该导致在代码审查中提出问题。
同样,这完全是主观的。有些情况下,没有抽象方法的抽象类是有意义的,它完全取决于解释和理由。无论你正在做什么,都要做出最好的决定。
答案 10 :(得分:1)
实际上,如果抽象类没有任何抽象方法,那是没有意义的。抽象类就像父亲。这位父亲有一些特性和行为,当您小的时候想成为父亲的孩子时,父亲说这个孩子(您)必须这样,这就是我们的MOTO,如果您不想做,您会不是我的孩子。