相关疑难解决方法(0)

喜欢构成而不是继承?

为什么喜欢构图而不是继承呢?每种方法都有哪些权衡取舍?什么时候应该选择继承而不是作文?

language-agnostic oop inheritance composition aggregation

1538
推荐指数
23
解决办法
29万
查看次数

使用相同的方法在类中实现两个接口.覆盖哪种接口方法?

两个具有相同方法名称和签名的接口.但是由单个类实现,那么编译器将如何识别哪个接口的方法是什么?

例如:

interface A{
  int f();
}

interface B{
  int f();
}

class Test implements A, B{   
  public static void main(String... args) throws Exception{   

  }

  @Override
  public int f() {  // from which interface A or B
    return 0;
  }
}   
Run Code Online (Sandbox Code Playgroud)

java overriding interface

223
推荐指数
6
解决办法
14万
查看次数

Java多重继承

为了完全理解如何解决Java的多重继承问题,我有一个经典的问题需要澄清.

可以说我有类Animal此有子类BirdHorse我需要做一个类Pegasus,从扩展BirdHorsePegasus既是一只鸟和一匹马.

我认为这是经典的钻石问题.从我能理解经典的方式来解决,这是使Animal,BirdHorse类接口,并实现Pegasus从他们.

我想知道是否有另一种方法来解决我仍然可以为鸟类和马创造物体的问题.如果有一种方法可以创造动物,那将是伟大的但不是必要的.

java oop multiple-inheritance diamond-problem multiple-interface-implem

165
推荐指数
9
解决办法
14万
查看次数

145
推荐指数
9
解决办法
10万
查看次数

Java中的标记接口?

我被告知Java中的Marker接口是一个空接口,用于向编译器或JVM发出信号,表明必须以特殊方式处理实现此接口的类的对象,如序列化,克隆等.

但最近我了解到它实际上与编译器或JVM无关.例如,在的情况下,Serializable接口的方法writeObject(Object)ObjectOutputStream不喜欢的东西instanceOf Serializable,以检测类实现是否Serializable与抛出NotSerializableException相应.一切都在代码中处理,这似乎是一个设计模式,所以我认为我们可以定义自己的标记接口.

现在我怀疑了:

  1. 上面提到的标记接口的定义在第一点是错误的吗?那么我们如何定义Marker接口呢?

  2. 而不是使用instanceOf运算符为什么不能使方法类似于writeObject(Serializable)有一个编译时类型检查而不是运行时?

  3. 注释如何比标记接口更好?

java design-patterns marker-interfaces

129
推荐指数
5
解决办法
9万
查看次数

当有现有类时,接口如何取代多重继承的需要

首先......对不起这篇文章.我知道stackoverflow上有很多帖子正在讨论多重继承.但我已经知道Java不支持多重继承,我知道使用接口应该是另一种选择.但我不明白并看到我的困境:

我必须对用Java编写的非常大且复杂的工具进行更改.在此工具中,有一个数据结构,它由许多不同的类对象构建,并具有链接的成员层次结构.无论如何...

  • 我有一个Tagged具有多个方法的类,并根据对象的类返回一个对象标记.它需要成员和静态变量.
  • 第二个类叫做XMLElement允许链接对象,最后生成一个XML文件.我还需要成员和静态变量.
  • 最后,我有这么多的数据类几乎都应该扩展XMLElement,其中一些Tagged.

好的,这不会起作用,因为它只能扩展一个类.我经常读到Java的所有内容都没问题,也没有必要进行多重继承.我相信,但我不知道接口应如何取代继承.

  1. 将真正的实现放在所有数据类中是没有意义的,因为它每次都是相同的,但这对于接口来说是必要的(我认为).
  2. 我不知道如何将我的一个继承类更改为接口.我在这里有变量,他们必须完全在那里.

我真的不明白所以请有人解释我如何处理这个问题?

java inheritance interface multiple-inheritance

54
推荐指数
3
解决办法
3万
查看次数

Java接口上的多重继承

我认为多重继承在Java中总是非法的,但是这段代码编译:

public interface A {
  void a();
}

public interface B {
  void b();
}

public interface AB extends A, B {
}
Run Code Online (Sandbox Code Playgroud)

有一个空的界面,如AB被认为是一个坏的做法?有没有办法在避免空接口(使用泛型或其他方式)的同时实现类似的东西?

注意:我不是在问如何通过接口模拟多重继承.我意识到我可以做到以下几点:

public class AbImpl implements A, B {
  public void a() {}
  public void b() {}
}
Run Code Online (Sandbox Code Playgroud)

由于各种原因,我需要一个具有两种方法的接口.

java multiple-inheritance

28
推荐指数
3
解决办法
4万
查看次数

java中的多重继承

Java不允许从多个类继承(仍允许从多个接口继承.),我知道它非常符合经典的钻石问题.但是我的问题是,当从多个基类继承时没有歧义(因此没有钻石问题的可能性)时,java不允许像C++这样的多重继承?

java oop multiple-inheritance diamond-problem

8
推荐指数
2
解决办法
5191
查看次数

java中的子类型

如果我有4种不同的Java类型(称之为A B C D),并且A是子类型B并且A是子类型CB是子类型DC是子类型D,这是合法的吗?那里有什么例子吗?

绘制图表:

           D
          | |  
        |     |
       B       C
        |     |
          | |
           A
Run Code Online (Sandbox Code Playgroud)

所以D是超类型.谢谢!

java subtype

4
推荐指数
1
解决办法
501
查看次数

使用泛型类型java扩展类

我正在尝试在java中执行以下操作:

public class ClassName<E> extends E
Run Code Online (Sandbox Code Playgroud)

不过这样做,我得到了:

error: unexpected type
Run Code Online (Sandbox Code Playgroud)

是不是就是这样,java不能这样做? - 如果是的话,我将如何实现这种效果?它在C++中完美运行,使用模板,类似:

template<typename E>
class ClassName: public E
Run Code Online (Sandbox Code Playgroud)

我真正想要实现的是能够以这种方式将类链接在一起,以实现java中多重继承的效果.

java generics inheritance templates multiple-inheritance

1
推荐指数
1
解决办法
1243
查看次数

为什么我们不能扩展多个班级

好吧,我目前正在开发一个使用JFrame和Applet的应用程序.

为什么我们不能延伸两者..

public class myClass extends Applet, javax.swing.JFrame {...}
//invalid...
Run Code Online (Sandbox Code Playgroud)

有效的代码是.

public class myClass extends Applet {
    javax.swing.JFrame frame = new javax.swing.JFrame();
    public void init(){
        frame.setSize(300, 400);
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么这样?为什么我们不能扩展多个班级

java extends class

-1
推荐指数
1
解决办法
2301
查看次数