【问题标题】:What are abstract classes and abstract methods? [duplicate]什么是抽象类和抽象方法? [复制]
【发布时间】:2012-11-29 05:38:52
【问题描述】:

可能重复:
Abstract class in Java

我得到了一些解释,但到目前为止我无法理解 Java 中的抽象类和方法是什么。

有人说它必须与程序的安全性有关,其他人说不是那样的。

即使从迪特尔和迪特尔的书中,我也没有明白它的目的。 我们何时、何地以及为什么使用它?

请像在教初学者一样解释它,非常感谢您的帮助。

【问题讨论】:

  • 我得到的只是它们不能被实例化,我不明白它们的全部目的。既然我们已经有了访问说明符,为什么还需要它。
  • 抽象类帮助设计人员强制开发人员实现所需的方法。

标签: java oop


【解决方案1】:

抽象类是不能被实例化的类。它的唯一目的是让其他类扩展。

抽象方法是抽象类中的方法(必须声明为抽象),这意味着扩展的具体类必须覆盖它们,因为它们没有主体。

抽象类的主要目的是,如果您有公共代码可以在子类中使用,但抽象类不应该有自己的实例。

您可以在此处阅读更多信息:Abstract Methods and Classes

【讨论】:

  • 扩展具体类必须重写抽象方法。
  • 在 Java 术语中,一个抽象方法可以覆盖另一个抽象方法。关键是为所有抽象方法提供一个实现。
【解决方案2】:

ABSTRACT CLASSES AND ABSTARCT METHODS FULL DESCRIPTION GO THROUGH IT

抽象方法没有主体。定义明确的方法不能声明为抽象。

具有抽象方法的类必须声明为抽象。

抽象类不能被实例化。

【讨论】:

    【解决方案3】:

    抽象类是一个你不能从中创建对象的类,所以它主要用于继承。(我不确定你是否可以在其中包含静态方法)

    抽象方法是子类必须重写的方法,它没有主体,被标记为抽象,只有抽象类才能拥有这些方法。

    【讨论】:

      【解决方案4】:

      使用抽象类,您可以为其他类扩展某种骨架。

      你不能实例化它们,但你可以放置一些通用的实现,你可以在扩展它们的类中使用它们。

      【讨论】:

        【解决方案5】:

        抽象方法是没有主体的方法签名声明。例如:

        public abstract class Shape {
            . . .
        
            public abstract double getArea();
            public abstract double getPerimeter();
        }
        

        getArea()getPerimeter() 方法是抽象的。因为Shape 类有一个抽象方法,它必须声明为abstract。一个类也可以声明为abstract 而没有任何抽象方法。当一个类是抽象类时,不能创建它的实例;只能创建(具体)子类的实例。具体类是未声明为抽象的类(因此没有抽象方法并实现所有继承的抽象方法)。例如:

        public class Circle extends Shape {
            public double radius;
            . . .
        
            public double getArea() {
                return Math.PI * radius * radius;
            }
        
            public double getPerimeter() {
                return 2.0 * Math.PI * radius;
            }
        }
        

        这样做的原因有很多。一种方法是编写一种对所有形状都相同但取决于在Shape 级别未知的特定形状行为的方法。例如,可以编写方法:

        public abstract class Shape {
            . . .
        
            public void printArea(PrintStream out) {
                out.println("The area is " + getArea());
            }
        }
        

        诚然,这是一个人为的例子,但它显示了基本思想:根据未指定的行为定义具体行为。

        拥有抽象类的另一个原因是您可以部分实现接口。接口中声明的所有方法都作为抽象方法被任何实现该接口的类继承。有时您想在类中提供接口的部分实现,并将细节留给子类;部分实现必须声明为抽象的。

        【讨论】:

        • 不管怎样,这个例子让我很清楚。
        【解决方案6】:

        一旦你了解了抽象在 Java 中的含义,你会问:为什么他们把它放进去? Java 可以在没有抽象的东西的情况下工作,但它构成了某种 OO 风格或词汇的一部分。确实存在抽象类或方法是表达程序作者意图的优雅方式的情况。大多数情况下,您正在编写将被其他人使用的框架或库。

        【讨论】:

          【解决方案7】:

          抽象方法没有主体。定义明确的方法不能声明为抽象。

          具有抽象方法必须声明为抽象

          抽象类无法实例化。

          【讨论】:

            【解决方案8】:

            - Abstract class 是一个无法实例化,即 object 无法创建。

            - Abstract method没有定义的方法声明

            -Non-abstract class 只能有非抽象方法。

            -Abstract class 可以同时具有非抽象和抽象方法。

            - 如果Class有一个Abstract method那么这个类也必须是抽象的。

            -Abstract method必须由第一个非抽象子类实现。

            - Abstract class in Design patterns 用于封装不断变化的行为。

            【讨论】:

            • 这是一个非常有用的答案。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-28
            • 2012-07-19
            • 1970-01-01
            • 2012-07-04
            • 1970-01-01
            相关资源
            最近更新 更多