studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java constructor super

java - para - manual de programacion android pdf



¿Es innecesario poner super() en constructor? (7)

¿No es este el compilador automáticamente si no lo pongo en el constructor de una subclase?

Eso significa que ni siquiera necesito preocuparme por eso? En algunos artículos lo sacan.

Y si tengo un constructor con argumentos, ¿será este el constructor o tomará un constructor sin lista de argumentos?


Cualquier constructor de clase siempre llama "super ()" si no se llama explícitamente super ([argumentos]), solo tenemos en cuenta el acceso del constructor de super clase mientras programamos ... cuando no ampliamos ninguna clase específica, automáticamente se extiende java.lang . Clase de objeto


El constructor padre predeterminado se llama desde el constructor predeterminado hijo incluso si no lo llama.

Principal

public class Main { public static void main(String[] args) { A a = new B(); } }

UN

public class A { public A() { System.out.println("A"); } }

segundo

public class B extends A { public B() { System.out.println("B"); } }

Huellas dactilares

A B


Llamar al súper constructor sin argumentos es solo un desperdicio de espacio de pantalla y tiempo de programador. El compilador genera exactamente el mismo código, ya sea que lo escribas o no.

class Explicit() { Explicit() { super(); } } class Implicit { Implicit() { } }


Primero, algo de terminología:

  • Constructor sin argumentos: un constructor sin parámetros;
  • Constructor no-args accesible: un constructor sin args en la superclase visible para la subclase. Eso significa que es público o protegido o, si ambas clases están en el mismo paquete, el acceso al paquete; y
  • Constructor predeterminado: el constructor público no-args agregado por el compilador cuando no hay un constructor explícito en la clase.

Entonces todas las clases tienen al menos un constructor.

Los constructores de subclases pueden especificar como lo primero que hacen qué constructor en la superclase invocar antes de ejecutar el código en el constructor de la subclase.

Si el constructor de la subclase no especifica qué constructor de la superclase invocar, el compilador llamará automáticamente al constructor no args accesible en la superclase.

Si la superclase no tiene constructor no-arg o no es accesible, entonces no especificar el constructor de la superclase a ser llamado (en el constructor de la subclase) es un error de compilación, por lo que debe especificarse.

Por ejemplo:

public class Base { } public class Derived extends Base { }

Esto está bien porque si no agrega ningún constructor explícitamente Java pone un constructor predeterminado público para usted.

public class Base { } public class Derived extends Base { public Derived(int i) { } }

También está bien.

public class Base { public Base(String s) { } } public class Derived extends Base { }

Lo anterior es un error de compilación ya que Base no tiene un constructor predeterminado.

public class Base { private Base() { } } public class Derived extends Base { }

Esto también es un error porque el constructor sin argumentos de Base es privado.



Si su método anula uno de los métodos de su superclase, puede invocar el método reemplazado mediante el uso de la palabra clave super.

La sintaxis para llamar a un constructor de superclase es

super(); --or-- super(parameter list);

Con super (), se llama al constructor de superclases sin argumentos. Con super (lista de parámetros), se llama al constructor de superclase con una lista de parámetros correspondiente.

Nota: Si un constructor no invoca explícitamente un constructor de superclase, el compilador de Java inserta automáticamente una llamada al constructor sin argumento de la superclase. Si la superclase no tiene un constructor sin argumentos, obtendrá un error en tiempo de compilación. Object tiene un constructor así, por lo que si Object es la única superclase, no hay problema.


abstract class Book { String title; String author; Book(String t,String a){ title=t; author=a; } abstract void display(); }

Si la superclase puede tener un constructor No-args. Es bueno tener un constructor sin argumentos; de lo contrario, debe pasar el superconstructor con el parámetro.

Si la superclase no tiene ningún constructor no-arg o no es accesible, entonces no especificar el constructor de la superclase a ser llamado (en el constructor de la subclase) es un error del compilador por lo que debe ser especificado

class MyBook extends Book{ int price ; public MyBook(String t,String a,int price){ super(t,a); this.price=price; } public void display(){ System.out.println("Title: "+title); System.out.println("Author: "+author); System.out.println("Price: "+price); }

}