Любой способ _не_ вызвать конструктор суперкласса в Java? - PullRequest
24 голосов
/ 03 июня 2010

Если у меня есть класс:

class A {
   public A() { }
}

и еще

class B extends A {
   public B() { }
}

есть ли способ заставить B.B() не звонить A.A()?

Ответы [ 13 ]

0 голосов
/ 03 июня 2010

Я думаю, что единственный способ сделать это - испортить байт-код.
Я не уверен, что Classloader или JVM проверяет, вызывается ли super(), но, как писал Божо, вы, вероятно, при этом получите несовместимые объекты.

0 голосов
/ 03 июня 2010

Каждый суперкласс нуждается в построении , и нет другого способа, кроме вызова конструктора.

0 голосов
/ 03 июня 2010

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

...