una sintaxis simple resueltos poner polimorfismo herencia ejercicios ejemplos como java inheritance constructor superclass

java - sintaxis - cómo heredar Constructor de superclase a subclase



polimorfismo java (6)

Constructores predeterminados: los constructores públicos con argumentos de salida (declarados o implícitos) se heredan de manera predeterminada. Puede probar el siguiente código para ver un ejemplo de esto:

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"); } } }

Si desea llamar explícitamente a un constructor de una súper clase, debe hacer algo como esto:

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"); } } }

La única advertencia es que la llamada super () debe venir como la primera línea de tu constructor, de lo contrario el compilador se enojará contigo.

¿Cómo heredar el constructor de una súper clase a una subclase?


Di si tienes

/** * */ public KKSSocket(final KKSApp app, final String name) { this.app = app; this.name = name; ... }

entonces una subclase llamada KKSUDPSocket que extiende KKSSocket podría tener:

/** * @param app * @param path * @param remoteAddr */ public KKSUDPSocket(KKSApp app, String path, KKSAddress remoteAddr) { super(app, path, remoteAddr); }

y

/** * @param app * @param path */ public KKSUDPSocket(KKSApp app, String path) { super(app, path); }

Simplemente transfiere los argumentos a la cadena de constructores, como las llamadas a las superclases, pero usando super (...) que hace referencia al constructor de la superclase y pasa los args dados.


El constructor de superclase NO PUEDE ser heredado en una clase extendida. Aunque se puede invocar en el constructor de clase extendida con super () como primera instrucción.


Lea sobre la palabra clave super (Desplácese hacia abajo de los constructores de subclase). Si entiendo tu pregunta, ¿quieres llamar a un constructor de superclase?

Vale la pena señalar que el compilador de Java colocará automáticamente una llamada de constructor no-arg a la superclase si no invocas explícitamente un constructor de superclase.


Los constructores no son heredados, debe crear un nuevo constructor con prototipo idéntico en la subclase que se asigna a su constructor correspondiente en la superclase.

Aquí hay un ejemplo de cómo funciona esto:

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); } }


Usted hereda atributos de clase, no constructores de clase. Así es como funciona:

Si no se agrega ningún constructor en la superclase, si no, el compilador agrega un contructor sin argumento. Este constructor predeterminado se invoca implícitamente cada vez que se crea una nueva instancia de la subclase. Aquí la subclase puede o no tener constructor, todo está bien.

si se proporciona un constructor en la superclase, el compilador verá si es un constructor no arg o un constructor con parámetros.

si no hay argumentos, el compilador lo invocará para cualquier instanciación de clase. Aquí también la subclase puede o no tener constructor, todo está bien.

si 1 o más contructors en la clase padre tienen parámetros y no hay ningún constructor args ausente, entonces la subclase debe tener al menos 1 constructor donde una llamada implícita para el constructo de clase padre se hace vía super (parent_contractor params).

de esta forma, está seguro de que los atributos de clase heredados siempre se instancian.