Java 没有任何实现和变量的抽象类是否有效地实现了接口?

Java 没有任何实现和变量的抽象类是否有效地实现了接口?,java,python,oop,inheritance,design-patterns,Java,Python,Oop,Inheritance,Design Patterns,我正在复习OOP的概念,阅读 在这里,本书将接口定义为 对象操作定义的所有签名集称为对象的接口。(临39) 抽象类为 抽象类的主要目的是为其子类定义公共接口。抽象类将其部分或全部实现推迟到子类中定义的操作;因此不能实例化抽象类。抽象类声明但未实现的操作称为抽象操作。非抽象类称为具体类。(临43) 我想知道,如果我定义一个没有任何内部数据(变量)和具体操作的抽象类,仅仅是一些抽象操作,它不就是一组签名吗?那么它不只是一个界面吗 这是我的第一个问题: 我能说一个只有抽象函数的抽象类是一个接口吗 然后

我正在复习OOP的概念,阅读

在这里,本书将接口定义为

对象操作定义的所有签名集称为对象的接口。(临39)

抽象类为

抽象类的主要目的是为其子类定义公共接口。抽象类将其部分或全部实现推迟到子类中定义的操作;因此不能实例化抽象类。抽象类声明但未实现的操作称为抽象操作。非抽象类称为具体类。(临43)

我想知道,如果我定义一个没有任何内部数据(变量)和具体操作的抽象类,仅仅是一些抽象操作,它不就是一组签名吗?那么它不只是一个界面吗

这是我的第一个问题:

  • 我能说一个只有抽象函数的抽象类是一个接口吗
  • 然后我想,这本书也谈到了类型和类

    对象的类定义了对象的实现方式。该类定义对象的内部状态及其操作的实现。相反,对象的类型仅指其接口,即它可以响应的请求集。一个对象可以有多种类型,不同类的对象可以有相同的类型。(临44)

    然后我想起了一些语言,比如Java,不允许多重继承,而允许多重实现。所以我想对于某些语言(如Java),抽象类只包含抽象操作!=接口

    这是我的第二个问题:

  • 我能说一个只有抽象函数的抽象类“通常相当于支持多重继承的语言中的接口吗
  • 我的第一个问题是检查定义,第二个问题是关于其他语言如何工作。我主要使用Java和Kotlin,所以我不太确定其他支持多重继承的语言。我不希望对当前的OOP语言进行全面的综述,但对单一语言(可能是python?)的一些提示将非常有用

  • 没有
  • 在Java中,每个类都是
    对象
    的子类,因此不能只使用抽象方法生成抽象类。它总是从
    对象继承方法实现:
    hashCode()
    equals()
    toString()
    ,等等

  • 是的,差不多
  • <>在C++中,没有特定的<代码>接口< /C> >关键字,而接口只是一个没有实现的类。C++中没有通用的基类,所以您可以真正实现一个没有实现的类。 多重继承并不是决定性的特征。Java具有某种类型的多重继承,具有称为“接口”的特殊类,这些类甚至可以具有
    default
    方法


    真正起作用的是通用基类
    Object
    <代码>接口
    是一种创建类的方法,它不是从
    对象继承的

    我认为以下链接可能会有所帮助:这是否回答了您的问题@Hülya是的,有点像,但我的问题不是抽象类和接口是如何使用/感知的,而是如何实现的。我想用所有抽象方法编写一个抽象类是一个糟糕的设计选择。但除了糟糕的设计选择之外,它们本质上是等价的吗?再想一想,我的问题可以解释为“我们能把类型和类分开吗?”或者“类是否意味着类型?”