Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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
通过使用继承避免代码重复 我来自C++背景,其中多重继承不是问题。Hoewever在Java中,我只能使用类来继承或实现接口。 我有多个类已经扩展了另一个类。但是所有这些类都应该共享同一个调试接口/类。 如何在不多次重复调试逻辑的情况下实现这种行为_Java_Inheritance - Fatal编程技术网

通过使用继承避免代码重复 我来自C++背景,其中多重继承不是问题。Hoewever在Java中,我只能使用类来继承或实现接口。 我有多个类已经扩展了另一个类。但是所有这些类都应该共享同一个调试接口/类。 如何在不多次重复调试逻辑的情况下实现这种行为

通过使用继承避免代码重复 我来自C++背景,其中多重继承不是问题。Hoewever在Java中,我只能使用类来继承或实现接口。 我有多个类已经扩展了另一个类。但是所有这些类都应该共享同一个调试接口/类。 如何在不多次重复调试逻辑的情况下实现这种行为,java,inheritance,Java,Inheritance,考虑我当前的设置: public interface Debug { public abstract void log(); } public class ClassA extends AnotherBaseClass implements Debug { public boolean doDebug = false; public void log() { if( doDebug ) System.out.println( "LOG" ); } }

考虑我当前的设置:

public interface Debug
{
  public abstract void log();
}

public class ClassA extends AnotherBaseClass implements Debug
{
  public boolean doDebug = false;

  public void log()
  {
    if( doDebug )
      System.out.println( "LOG" );
  }
}

public class ClassB implements Debug
{
  public boolean doDebug = false;

  public void log()
  {
    if( doDebug )
      System.out.println( "LOG" );
  }
}

通常,这是使用聚合而不是继承的地方,方法是让类具有用于调试日志记录的成员(通常是私有的)。如果类必须实现接口并在内部使用调试日志记录,那么您可以让它们这样做,然后将每个
debug
接口方法交给私有实例


但是,如果您使用的是Java 8,那么您还有另一个选择:对于默认的接口方法,这是一种多重继承Lite。

如果您使用的是Java 8,那么有一个新功能可以满足您的需求:您可以使用保留字
default
在接口中提供默认实现。这个新特性被称为。

注意,在Java中,接口中的方法不必有关键字
abstract
,因为默认情况下所有方法都是
abstract
。另外,关键字
public
是不必要的。实际上,类A处于调试状态,而类B处于非调试状态吗?@mceponder谢谢你的提示,我更喜欢它的explicit@Moh-哦,是的,每个类都应该能够自己调试independently@Buni我知道你的意思,但Java语言规范却不这么说:允许但不鼓励为接口中声明的方法冗余指定公共和/或抽象修饰符。“看,这是一个很好的解释,解释了为什么使用组合而不是继承更好:谢谢你,我现在已经解决了我的问题。然而,我现在也觉得问这个问题很愚蠢……不要觉得愚蠢:这是一个大多数开发人员都没有想到的反复出现的问题。他们认为继承是最好的,因为他们在学校学到继承是OO的原则之一。这是很好的想知道什么更好:)。谢谢你,这将是我接受的答案,如果我会去继承。