В чем разница между "extends" и "implements" в java в отношении производительности и памяти и т. д

в чем разница между выходит и осуществляет в java относительно производительности и памяти и т. д. Например, возьмите следующие сценарии,

1)

public interface PrintResult
{
  public final int NO_ERROR=0;
  public final int SUCCESS=1;
  public final int FAILED=-1;
}


public class PrintProcess implements PrintResult
{
  //Perform some operation
}



2)

public class PrintResult
{
  public final int NO_ERROR=0;
  public final int SUCCESS=1;
  public final int FAILED=-1;
}


public class PrintProcess extends PrintResult
{
  //Perform some operation
}

для вышеуказанных сценариев (1,2) в чем разница между использованием выходит (извлечение дочернего класса), осуществляет (интерфейс реализации). относительно представления, памяти, etc. ?

2 ответов


во время памятного сеанса Q&A кто-то спросил Джеймса Гослинга (изобретателя Java): Если бы вы могли сделать Java снова, что бы вы изменили? . Я бы пропустил классы он ответил:

Java не позволяет расширить несколько классов. Это позволяет избежать некоторых проблем, связанных с множественным наследованием. Однако вы можете реализовать несколько интерфейсов. Это огромный плюс.

некоторые люди также считают extends уменьшает гибкость их код.

однако, я сомневаюсь, что есть огромная разница в производительности, эффективности и т. д. Фактически, они могут даже производить один и тот же байт-код ( хотя я не уверен ). И вы сравниваете две разные вещи, которые имеют разные функции, это как спросить, являются ли яблоки более эффективными, чем апельсины.


класс расширяет другой класс и реализует интерфейс. интерфейс расширяет другой интерфейс. Интерфейс не имеет реализованных методов все определенные методы пусты, поэтому, если класс наследует от интерфейса, он должен реализовать его методы. Но если Class1 наследует от Class2, то у него уже есть некоторые рабочие методы (из Class2) и просто расширяет Class2.