Как наследовать конструктор от суперкласса к подклассу?
Как наследовать конструктор от суперкласса к подклассу
Ответ 1
Конструкторы не наследуются, вы должны создать новый, идентично прототипированный конструктор в подклассе, который сопоставляет его конструктору соответствия в суперклассе.
Вот пример того, как это работает:
class Foo {
Foo(String str) { }
}
class Bar extends Foo {
Bar(String str) {
// Here I am explicitly calling the superclass
// constructor - since constructors are not inherited
// you must chain them like this.
super(str);
}
}
Ответ 2
Конструктор суперкласса НЕ МОЖЕТ быть унаследован в расширенном классе. Хотя он может быть вызван в конструкторе расширенного класса с супер() в качестве первого оператора.
Ответ 3
Конструкторы по умолчанию - публичные конструкторы с внешними аргументами (объявленными или подразумеваемыми) - по умолчанию унаследованы. Вы можете попробовать следующий код для примера:
public class CtorTest {
public static void main(String[] args) {
final Sub sub = new Sub();
System.err.println("Finished.");
}
private static class Base {
public Base() {
System.err.println("In Base ctor");
}
}
private static class Sub extends Base {
public Sub() {
System.err.println("In Sub ctor");
}
}
}
Если вы хотите явно вызвать конструктор из суперкласса, вам нужно сделать что-то вроде этого:
public class Ctor2Test {
public static void main(String[] args) {
final Sub sub = new Sub();
System.err.println("Finished.");
}
private static class Base {
public Base() {
System.err.println("In Base ctor");
}
public Base(final String toPrint) {
System.err.println("In Base ctor. To Print: " + toPrint);
}
}
private static class Sub extends Base {
public Sub() {
super("Hello World!");
System.err.println("In Sub ctor");
}
}
}
Единственное предостережение в том, что вызов super() должен начинаться как первая строка вашего конструктора, иначе компилятор будет злиться на вас.
Ответ 4
Читайте о супер ключевое слово (прокрутите вниз конструкторы подкласса). Если я понимаю ваш вопрос, вы, вероятно, хотите вызвать конструктор суперкласса?
Стоит отметить, что компилятор Java автоматически добавит вызов конструктора no-arg в суперкласс, если вы явно не вызываете конструктор суперкласса.
Ответ 5
Скажите, есть ли у вас
/**
*
*/
public KKSSocket(final KKSApp app, final String name) {
this.app = app;
this.name = name;
...
}
тогда подкласс с именем KKSUDPSocket, расширяющий KKSSocket, может иметь:
/**
* @param app
* @param path
* @param remoteAddr
*/
public KKSUDPSocket(KKSApp app, String path, KKSAddress remoteAddr) {
super(app, path, remoteAddr);
}
и
/**
* @param app
* @param path
*/
public KKSUDPSocket(KKSApp app, String path) {
super(app, path);
}
Вы просто передаете аргументы цепочке конструкторов, например вызовы методов суперклассам, но с помощью супер (...), который ссылается на конструктор суперкласса и передает в заданных аргументах.
Ответ 6
Вы наследуете атрибуты класса, а не конструкторы классов. Вот как это делается:
Если конструктор не добавлен в суперкласс, если нет, то компилятор добавляет конструктор без аргументов. Этот конструктор по умолчанию вызывается неявно всякий раз, когда создается новый экземпляр подкласса. Здесь подкласс может иметь или не иметь конструктор, все в порядке.
Если конструктор предоставлен в суперклассе, компилятор увидит, является ли он конструктором без аргумента или конструктором с параметрами.
если нет аргументов, тогда компилятор будет вызывать его для любого подкласса подкласса. Здесь также может существовать или не иметь конструктор, все в порядке.
если 1 или более конструкторов родительского класса имеют параметры и конструктор args отсутствует, то подкласс должен иметь по крайней мере 1 конструктор, где неявный вызов для конструкции родительского класса выполняется через super (parent_contractor params).
таким образом вы уверены, что атрибуты унаследованного класса всегда инстанцируются.