在没有任何抽象方法的情况下定义抽象类

时间:2011-01-27 00:11:58

标签: java class inheritance methods abstract

我可以在不添加抽象方法的情况下定义抽象类吗?

11 个答案:

答案 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类 这样做的目的虽然如果你没有在子类中实现你的逻辑,你可以得到父逻辑

please check the HttpServlet source code

答案 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,如果您不想做,您会不是我的孩子。