为什么抽象类中没有抽象方法()?

时间:2015-07-24 12:52:33

标签: java abstract

如果我没有创建任何抽象abstract,那么使用method()类,那么抽象类的含义是什么。在应用程序中抽象类的目的是什么,或者在这种情况下,抽象类和Java中的普通类有什么区别?

我们如何创建一个object抽象类?

4 个答案:

答案 0 :(得分:2)

抽象类允许您添加基本行为,因此程序员不必编写所有代码,同时仍然强制他们遵循您的设计。

抽象类的主要目标是提供共同行为的共享实现 - 促进代码的重用。 abstract class可以用作基础classes,可以subclasses进行扩展,以便在实际实施时使用。

以下是abstract class用法的一个很好的例子:

public abstract AbstractFlow{
    public void initialStep() {
        //implementation directly in abstract superclass
    }

    public abstract void implement(); // implemented by subclasses

    public void afterAction() {
        //implementation directly in abstract superclass
    }
}

它是使用它的其他类的模板。

如果我们可以考虑一个实例:

Abtract Class Cricket

包括20-20, Test, One Day在内的所有形式的Cricket都是具体的类,其基本功能已经实现。

在极少数情况下,类也可以是抽象的,没有任何方法是抽象的。

答案 1 :(得分:1)

您无法实例化抽象类,换句话说,如果您有......

abstract class MyAbstractClass() { ... }

......你不能做以下事情......

MyAbstractClass object = new MyAbstractClass();

虽然您可以使用私有构造函数获得相同的结果,但是使用抽象类,您仍然可以使用其他类来扩展抽象类,然后CAN(可能)实例化。

这种类似的用法是使用抽象基类。例如,假设您可能想要存储有关汽车和摩托车的数据。然后,您的类VehicleCar可能会有一个公共基类Motorcycle。即使Vehicle没有任何抽象方法,你也许不希望任何人创建一个纯粹的" Vehicle"对象,但只有CarMotorcycle个对象。因此,您可以使您的Vehicle类抽象化并完全获得它。

答案 2 :(得分:1)

  

如果我不创建任何抽象方法(),那么使用Abstract类则抽象类的含义是什么。

来自official docs

的定义

抽象类是一个声明为abstract的类 - 它可能包含也可能不包含抽象方法。

  

那么抽象类在应用程序中使用的目的是什么?在那种情况下,抽象类和java中的普通类有什么区别?

抽象类无法实例化,但可以进行子类化。

答案 3 :(得分:1)

抽象类对于为一组类定义公共方法和属性非常有用。我试着举个例子:

想象一下,您正在设计一个管理员工或某个公司的任何应用程序的应用程序。您将拥有不同类型的用户

  • 员工
  • 宾客
  • 管理者
  • 董事

即使它们具有不同的特征,也有许多常见的属性,如名称,ID,年龄等。按照这个思路,我们定义了一个超类用户

public class User {

public String name;
public int age;
public String id;

public User(String name, int age, String id) {
    this.name = name;
    this.age = age;
    this.id = id;
}

//here would be the getters and setters
}

现在,其他类将被声明为此User类的扩展(请检查java heritance out。)

public class Employee extends User{//define specific methods}
public class Manager extends User{//as above}
//and so on...

现在,虽然您希望用户的所有这些子类型继承公共和属性,您不想创建用户本身,但您并不希望任何人属于键入User,只显示类的子类型。因此,您不希望实例化用户,这就是使用关键字 abstract 的原因。

通过将User类声明更改为abstract,您告诉您不希望实例化此类并阻止具有User类型的用户,从而保证您创建的唯一用户是Employee,主任等:

public abstract class User {}