gpt4 book ai didi

java - 实现类似多态继承的行为

转载 作者:行者123 更新时间:2023-12-01 12:44:14 26 4
gpt4 key购买 nike

背景和设置

好吧,让我们看看我能否让这个问题“有意义”。以下代码示例旨在传达原理并反射(reflect)代码背后的想法。如果您对详细代码感兴趣,可以找到代码,here

我已阅读基础知识,查阅 Java Tutorials (这是一个很棒的资源),很好的 ol' Dietel 和文档。澄清一下:我是一名初学者程序员。

我有三 (3) 门类(class):

  1. 实现类
  2. 类是接口(interface)
  3. ClassThatDoesSmthg

以下是它们的定义:

界面

真的很简单:

public interface ClassThatIsInterface {
public void doSomething(type variable);
}

实现接口(interface)的类

public class ClassThatImplents implements ClassThatIsInterface {

// Here's the bit I hope to ask about, pt. 1 of 2:

ClassThatDoesSmthg instance = new ClassThatDoesSmthg(this,
appropriateVariable);
}

做某事的类

public class ClassThatDoesSmthg {

// And the second bit, pt. 2 of 2:

public ClassThatDoesSmthg (ClassThatIsInterface variableOne,
type appropriateVariable) {

}

问题

我认为,上述代码片段应该为您提供了解决该问题的足够信息。

确实,问题的焦点是后两个类:ClassThatImplementsClassThatDoesSmthg

ClassThatDoesSmthg 需要一个 interfaceClassThatIsInterface 类型的对象作为其构造函数的一部分;但是,发送到构造函数的是一个实现 ClassThatIsInterfaceClassThatImplements 类型的对象。

显然,如果没有实现,new ClassThatDoesSmthg(this,propertyVariable) 语句将会失败(生成错误)。我感兴趣的是什么;然而,当一个类实现一个接口(interface)时,实现类 - 在这种情况下 - 被认为是一个 is-a ClassThatIsInterface (至少,这就是它的样子)。结果,该语句成功。

所以,这是我的问题:从概念上讲,ClassThatImplements 发生了什么,它被识别为 ClassThatIsInterface 类型?

最佳答案

一般可以通过三种方式看待继承

  • 状态继承(类实例的内部表示)
  • 行为的继承(在本例中为方法及其实现)
  • 类型继承(这就是is-a关系的构成)

前两者紧密相连,甚至常常不单独考虑。

Java 中帮助您强制执行这些类型继承的两个关键字是 extendsimplements

前者只允许单行继承,通过使用它,您可以创建上述所有三种类型的继承关系。

另一方面,后者允许您使用多重继承,但仅限于类型的继承。状态和行为的多重继承在 Java 中是不可能的,应该使用组合来实现类似的效果。

这基本上就是 Java 作为一种语言的设计方式。如果您看看其他(或多或少)面向对象的语言,您可以看到其他方法。 C++ 在所有三个方面都支持多重继承(在我看来这并不是一件好事)。 Ruby 允许您使用 mixins 来处理行为的继承,而且由于该语言支持 duck typing,因此很少关注类型的强制执行。 .

So, here is my question: conceptually, what is happening to ClassThatImplements to where it is recognized as of type ClassThatIsInterface?

总而言之,类单独实现接口(interface)这一事实定义了两者之间的is-a关系。幕后没有发生更多事情。

您可以在 Java Language Specification 中查看子类型的具体规则。 。就你而言,这非常简单。当您查看泛型类时,它会变得更有趣。但这并不是读起来最愉快的。

关于java - 实现类似多态继承的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24840801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com