Java - расширение класса и повторное использование методов? - PullRequest
11 голосов
/ 24 июня 2011
public class BaseClass {
   public void start() {
      // do something
   }
}

public class ClassA extends BaseClass {

}

ClassA c = new ClassA();
c.start();

В следующем коде я хочу использовать метод start (), как он был определен в суперклассе, я видел во многих кодах других разработчиков, что они переопределяют метод в суперклассе, а затем они вызывают супер , есть ли причина для этого?

public class ClassA extends BaseClass {
   @Override
   public void start() {
      super.start();
   }
}

Ответы [ 5 ]

11 голосов
/ 24 июня 2011

Ясность?Некоторые разработчики считают, что в подклассе метод более понятен.Я не согласен.Это избыточная информация.

По крайней мере, начиная с Java 5, вы можете добавить @Override, чтобы компилятор сообщал вам об изменении / исчезновении подписи.

За исключением конструкторов.Для конструкторов вы действительно должны создать свой собственный с той же подписью и делегировать вверх.В этом случае опускание не эквивалентно.

9 голосов
/ 24 июня 2011

Переопределение метода, выполнение чего-то особенного, затем вызов super.method() называется украшением метода - вы добавляете к поведению.Подробнее здесь: Шаблон декоратора .

Переопределение его без вызова метода super - это просто переопределение метода - изменение поведения.

6 голосов
/ 24 июня 2011
public class ClassA extends BaseClass {
  @Override
  public void start() {
     super.start();
  }
}

делает то же самое, что вообще не переопределяет, как это

public class ClassA extends BaseClass {}

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

1 голос
/ 24 июня 2011

Иногда я делаю это (временно, во время разработки), когда хочу установить точку останова.

0 голосов
/ 11 апреля 2013

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

  • Но единственное место, где нам нужно сделать переопределение, это сказать, что вы перегрузили свой суперкласс по умолчанию.конструктор, то в подклассе вы должны упомянуть вызов перегруженного конструктора суперкласса в качестве первой строки вашего конструктора подкласса (т. е. объект суперкласса должен быть создан до создания подкласса).Например

класс BaseClass {

Baseclass (arg1) {

}

}

класс Aextends BaseClass {

A {super (arg1);}

}

В других местах это только добавит избыточность кода, что совсем не обязательно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...