¿Podemos instanciar una clase abstracta en Java?

Clase abstracta , hemos escuchado que las clases abstractas son clases que pueden tener métodos abstractos y no se pueden instanciar. No podemos instanciar una clase abstracta en Java porque es abstracta, no está completa, por lo tanto, no se puede usar.

Ejemplo 1

Java

// Java program to demonstrate abstract class
// cannot have instance
  
public abstract class ClassOne {
  
    public void printSomething()
    {
        System.out.println("Hello in abstract class");
    }
}
class CreateClassOne {
  
    public static void main(String[] args)
    {
        // instance of abstract 
          // class "ClassOne"
        ClassOne obj = new ClassOne();
    }
}

Producción

prog.java:17: error: ClassOne is abstract; cannot be instantiated
        ClassOne obj = new ClassOne();
                       ^
1 error

Ejemplo 2

Java

// Java code to demonstrate
// Anonymous class
  
public abstract class ClassOne {
  
    public void printSomething()
    {
        System.out.println("Hello in abstract class");
    }
}
  
class InheritClassOne {
  
    public static void main(String[] args)
    {
  
        // obj points to anonymous subclass
        ClassOne obj = new ClassOne() {};
        
          // calls the implementation 
          // provided by ClassOne
        obj.printSomething();
    }
}
Producción

Hello in abstract class

¡La clase abstracta está instanciada aquí! ¡Pero eso no es posible!

Sí, la respuesta sigue siendo la misma, no se puede instanciar la clase abstracta, aquí en el segundo ejemplo no se crea el objeto de ClassOne sino la instancia de una subclase anónima de la clase abstracta. Y luego está invocando el método printSomething() en la referencia de clase abstracta que apunta al objeto de subclase obj. Cuando ha agregado { } mientras creaba el objeto en la segunda clase, el compilador lo toma como una clase anónima donde { } denota el cuerpo de la clase anónima

Ejemplo 1

Java

// java program to demonstrate anonymous class
  
interface NewClass {
    public void show();
}
  
class AnonymousClassExample {
  
    public static void main(String[] args)
    {
        // nc points to anonymous class inside
        // the {}
        NewClass nc = new NewClass() {
            public void show()
            {
                System.out.println(
                    "This is an anonymous class implementing interface");
            }
        };
  
        // calls the implementation
        // method of anonymous class
        nc.show();
    }
}
Producción

This is an anonymous class implementing interface

 En este ejemplo, no se crea una instancia de la interfaz, pero una clase anónima implementa la nueva clase de interfaz. Ahora, es posible que haya entendido cómo funcionó el segundo ejemplo donde, en lugar de instanciar una clase abstracta, se creó una subclase anónima o una clase abstracta implementó una clase abstracta. 

Ejemplo 2

Java

// Anonymous class implementing abstract class
  
public abstract class ClassOne {
  
    public ClassOne()
    {
        System.out.println(
            "Anonymous(Unnamed) Subclass object Created");
    }
  
    public void printSomething()
    {
        System.out.println(
            "Hello,in abstract class:printSomething method");
    }
    public abstract void implementMethod();
}
  
class AnonymousClassExample {
  
    public static void main(String[] args)
    {
        // anonymous class
        ClassOne obj = new ClassOne() {
            @Override public void implementMethod()
            {
                System.out.println(
                    "Implemented abstract method in anonymous class");
            }
        };
  
        // calls abstract class implementation
        obj.printSomething();
  
        // calls anonymous class implementation
        obj.implementMethod();
    }
}
Producción

Anonymous(Unnamed) Subclass object Created
Hello,in abstract class:printSomething method
Implemented abstract method in anonymous class

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *