Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的抽象类_Java_Oop_Abstract Class - Fatal编程技术网

Java中的抽象类

Java中的抽象类,java,oop,abstract-class,Java,Oop,Abstract Class,可能重复: 在爪哇 其他类从中扩展的每个类都必须是抽象类吗 如果没有,在什么条件下 更一般地说,我们什么时候才能确定一个类是抽象类 其他类从中扩展的每个类都必须是抽象类吗 否 如果一个类在其声明中包含抽象,那么它将被视为抽象 例如: public abstract class Foo{} 阅读更多信息 其他类从中扩展的每个类都必须是抽象类吗 否 如果一个类在其声明中包含抽象,那么它将被视为抽象 例如: public abstract class Foo{} 阅读更多信息 绝对

可能重复:

在爪哇

其他类从中扩展的每个类都必须是抽象类吗

如果没有,在什么条件下

更一般地说,我们什么时候才能确定一个类是抽象类

其他类从中扩展的每个类都必须是抽象类吗

如果一个类在其声明中包含
抽象
,那么它将被视为
抽象

例如

public abstract class Foo{}

阅读更多信息

其他类从中扩展的每个类都必须是抽象类吗

如果一个类在其声明中包含
抽象
,那么它将被视为
抽象

例如

public abstract class Foo{}

阅读更多信息


  • 绝对不是。类可以在不抽象的情况下进行扩展

    通常,当需要基于其他方法定义某些方法的行为时,会将类抽象化,但不能在此类中提供这些方法的实现

    例如:

    public abstract class Vehicle {
       public void goHome() {
           move(getHome());
       }
       public abstract void move();
    }
    
    class Car extends Vehicle {
       @Override public void move() { //use engine };
    }
    class Bicycle extends Vehicle {
       @Override public void move() { //use pedals };
    }
    
    (如果类本身不是抽象的,则类不能有抽象方法)


    另一个合理的原因是该类是某个基类,被实例化没有意义。您可以指定受保护的构造函数,也可以将其抽象化。

    绝对不能。类可以在不抽象的情况下进行扩展

    通常,当需要基于其他方法定义某些方法的行为时,会将类抽象化,但不能在此类中提供这些方法的实现

    例如:

    public abstract class Vehicle {
       public void goHome() {
           move(getHome());
       }
       public abstract void move();
    }
    
    class Car extends Vehicle {
       @Override public void move() { //use engine };
    }
    class Bicycle extends Vehicle {
       @Override public void move() { //use pedals };
    }
    
    (如果类本身不是抽象的,则类不能有抽象方法)


    另一个合理的原因是该类是某个基类,被实例化没有意义。您可以指定受保护的构造函数,也可以将其抽象化。

    每个类超级类都不是抽象类

    例如,对象类是所有类的超类,但它不是抽象类

    我们将在不希望程序员或用户创建对象的地方使用抽象类


    而且还要绑定默认属性和行为,以便扩展抽象的类必须强制继承这些属性。

    每个类超类都不是抽象类

    例如,对象类是所有类的超类,但它不是抽象类

    我们将在不希望程序员或用户创建对象的地方使用抽象类


    还要绑定默认属性和行为,以便扩展抽象的类必须强制继承这些属性。

    为了回答您的一般问题,我们可能希望类是抽象的,在其中有一些一般行为,子类有特定的实现

    我在很多地方都见过它,在这些地方有一些默认的泛型行为是很好的,只有少数子类需要更改


    另外,正如在另一个答案中所述,如果我们不想让用户实例化通用类,而是想强迫用户使用特定的实现,抽象会有所帮助。

    要回答您的一般问题,我们可能希望类是抽象的,以便在其中具有一些通用行为,子类具有特定的实现

    我在很多地方都见过它,在这些地方有一些默认的泛型行为是很好的,只有少数子类需要更改


    另外,正如statd在另一个答案中所说,如果我们不想让用户实例化通用类,而是想强迫用户使用特定的实现,抽象会有所帮助。

    每个超类都不必是抽象的,但Scott Meyer在他的“高效C++”中指出,对象层次结构中的每个非叶类都应该是抽象的。现在我们有了Java,这个概念可能应该扩展为“抽象或接口”。

    每个超类都不必是抽象的,但Scott Meyer在他的“有效的C++”中指出,对象层次结构中的每个非叶类都应该是抽象的。现在我们有了Java,这个概念可能应该扩展为“抽象或接口”。

    您可以将抽象类视为某种产品的原型版本。例如,您有一个产品的规范,并且有几种方法可以实现它们。抽象类指定了所有这些规范,但是它没有给出任何实现,因为没有默认值,它们必须由产品的各种版本(您的子类)以不同的方式实现。但是,它可能已经实现了各种产品将具有的功能


    这自动意味着您不能初始化抽象类,因为它没有实现规范的某些部分。

    您可以将抽象类视为某种产品的原型版本。例如,您有一个产品的规范,并且有几种方法可以实现它们。抽象类指定了所有这些规范,但是它没有给出任何实现,因为没有默认值,它们必须由产品的各种版本(您的子类)以不同的方式实现。但是,它可能已经实现了各种产品将具有的功能


    这自动意味着您不能初始化抽象类,因为它没有实现规范的某些部分。

    可能性重复我不这么认为,Damodar。这是关于抽象的需要,而不是概念的意义。我同意Urs Reupke。请再次检查这个问题“更一般地说,我们什么时候才能确定一个类是抽象类?”通过观察java.lang.Object不是抽象的,很容易回答第一个问题…可能性重复我不这么认为,达莫达尔。这是关于