logo

Tipos de clases en Java

En Java, el clase es un plano a partir del cual podemos crear un objeto individual. Java proporciona un palabra clave clase nombrada mediante la cual podemos declarar una clase. Dentro de la clase, definimos clase miembros y funciones. No es posible crear programas java sin clase. También podemos referirnos a una clase como usuario definido Tipos de clases

Hay siete tipos de clases en Java:

    Clase estática Clase final Clase abstracta Clase de hormigón Clase única Clase POJO Clase interna
Tipos de clases en Java

Clase estática

En Java, estática es una palabra clave que gestiona objetos en la memoria. El objeto estático pertenece a la clase en lugar de a la instancia de la clase.

podemos hacer una clase estático si y sólo si es una clase anidada. También podemos decir que las clases estáticas se conocen como clases anidadas. Significa que una clase que se declara como estática dentro de otra clase se conoce como clase estática. La clase estática anidada no requiere referencia a la clase externa. El propósito de una clase estática es proporcionar el esquema de su clase heredada.

Las propiedades de la clase estática son:

  • La clase sólo tiene miembros estáticos.
  • No puede acceder al miembro (no estático) de la clase externa.
  • No podemos crear un objeto de clase estática.

Entendamos el concepto de clase estática a través de un programa.

StaticClassExample.java

 public class StaticClassExample { private static String str = 'Javatpoint'; //nested class which is a Static class public static class StaticDemo { //non-static method of Static class public void show() { System.out.println(str); } } public static void main(String args[]) { StaticClassExample.StaticDemo obj = new StaticClassExample.StaticDemo(); obj.show(); } } 

Producción:

 Javatpoint 

En la clase externa del programa anterior, hemos declarado una variable cadena como estático porque estamos accediendo a esa variable desde un contexto estático. Si declaramos esa variable como no estática, el compilador muestra un error porque una clase estática anidada no puede acceder a miembros no estáticos de la clase externa.

La segunda cosa que hay que notar en el programa anterior es que para crear el objeto de la clase anidada no necesitamos crear una instancia de la clase externa. Si la clase anidada no es una clase estática, necesitamos crear una instancia de la clase externa.

Clase final

La palabra final significa que no se puede cambiar. El final La clase en Java se puede declarar usando el palabra clave final . Una vez que declaramos una clase como final, los valores siguen siendo los mismos en todo el programa. El propósito de la clase final es hacer que la clase inmutable como la clase String. Es sólo una forma de hacer que la clase sea inmutable. Recuerde que el la clase final no se puede extender . También evita que la clase sea subclasificada .

Entendamos el concepto de la clase final a través de un programa.

FinalClassExample.java

 //base class declared as final final class A { void printmsg() { System.out.print('Base class method is executed.'); } } //derived class //extending a final class which is not possible //it shows the error cannot inherit final class at compile time class B extends A { void printmsg() { System.out.print('Derived class method is executed.'); } } //main class public class FinalClassExample { public static void main(String[] arg) { B obj = new B(); obj.printmsg(); } } 

Producción:

 /FinalClassExample.java:11: error: cannot inherit from final A class B extends A 

Clase abstracta

Un clase abstracta es un que se declara con la palabra clave abstracto . La clase puede contener o no métodos abstractos. No podemos crear una instancia de una clase abstracta pero puede ser una subclase. Estas clases están incompletas, por lo que para completar la clase abstracta debemos extender las clases abstractas a una clase concreta. Cuando declaramos una subclase como abstracta, es necesario proporcionar la implementación de métodos abstractos. Por tanto, la subclase también debe declararse abstracta. Podemos lograr la ocultación de datos utilizando la clase abstracta. Un ejemplo de una clase abstracta es Mapa abstracto clase que forma parte del marco de Colecciones.

Entendamos el concepto de clase abstracta a través de un programa.

AbstractClassExample.java

variables globales js
 //abstract class abstract class MathematicalOperations { int a=30, b=40; //abstract method public abstract void add(); } public class Operation extends MathematicalOperations { //definition of abstract method public void add() { System.out.println('Sum of a and b is: 'a+b); } public static void main(String args[]) { MathematicalOperations obj = new Operation(); obj.add(); } } 

Producción:

 Sum of a and b is: 70 

Clase de hormigón

Estas son las clases regulares de Java. Una clase derivada que proporciona las implementaciones básicas para todos los métodos que aún no están implementados en la clase base se conoce como concreto clase. En otras palabras, se trata de clases Java normales en las que se implementan todos los métodos de una clase abstracta. Podemos crear un objeto de la clase concreta directamente. Recuerde que la clase concreta y la clase abstracta no son lo mismo. Una clase concreta puede ampliar su clase padre. Se utiliza para requisitos específicos.

Entendamos el concepto de clase concreta a través de un programa.

ConcreteClassExample.java

 //Concrete Class public class ConcreteClassExample { //method of the concreted class static int product(int a, int b) { return a * b; } public static void main(String args[]) { //method calling int p = product(6, 8); System.out.println('Product of a and b is: ' + p); } } 

Producción:

 Product of a and b is: 48 

Clase única

Una clase que sólo tiene un objeto a la vez se conoce como clase singleton . Aún así, si intentamos crear una instancia por segunda vez, esa instancia recién creada apunta a la primera instancia. Si realizamos alguna alteración dentro de la clase a través de cualquier instancia, la modificación afecta también a la variable de la instancia única. Generalmente se usa para controlar el acceso mientras se trata de la conexión de la base de datos y la programación del socket. Si queremos crear una clase singleton, hacemos lo siguiente:

  • crear un privado constructor .
  • Cree un método estático (mediante la inicialización diferida) que devuelva el objeto de la clase singleton.

SingletonClassExample.java

 public class Singleton { private String objectState; private static Singleton instance = null; private Singleton() throws Exception { this.objectState = 'Javatpoint'; } public static Singleton getInstance() { if(instance==null) { try { instance=new Singleton(); } catch(Exception e) { e.printStackTrace(); } } return instance; } public String getObjectState() { return objectState; } public void setObjectState(String objectState) { this.objectState = objectState; } } 

Producción:

 Javatpoint 

Clase POJO

En Java, POJO significa Plain Old Java Objeto. Una clase Java que contiene sólo variables privadas, setter y getter se conoce como POJO clase. Se utiliza para definir objetos Java que aumentan la reutilización y legibilidad de un programa Java. La clase proporciona encapsulación. Se usa ampliamente en Java porque es fácil de entender estas clases. La clase POJO tiene las siguientes propiedades:

  • No extiende las clases predefinidas como Arrays, HttpServlet, etc.
  • No puede contener anotaciones predeterminadas.
  • No puede implementar predefinidos interfaces .
  • No es necesario agregar ningún constructor.
  • Todas las variables de instancia deben ser privadas.
  • El captador/definidor métodos debe ser público.

Entendamos el concepto de clase POJO a través de un programa Java.

PojoClassExample.java

 class PojoDemo { //private variable private double price=89764.34; //getter method public double getPrice() { return price; } //setter method public void setPrice(int price) { this.price = price; } } //main class public class PojoClassExample { public static void main(String args[]) { PojoDemo obj = new PojoDemo(); System.out.println('The price of an article is '+ obj.getPrice()+' Rs.'); } } 

Producción:

 The price of an article is 89764.34 Rs. 

clase interna

Java nos permite definir una clase dentro de una clase y dichas clases se conocen como clases anidadas . Se utiliza para agrupar las clases de forma lógica y lograr encapsulación . Se puede acceder a los miembros de la clase externa (incluidos los privados) mediante clase interna . La sintaxis general para declarar la clase anidada es la siguiente:

 class OuterClass { //code class NestedClass { //code } } 

Las clases anidadas son de dos tipos:

1. Clase anidada estática: Una clase que es estático y anidado se llama clase anidada estática. Interactúa con el miembro de instancia de su clase externa. Podemos crear un objeto de la clase anidada estática utilizando la siguiente sintaxis:

 OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); 

2. Clase anidada no estática: Las clases anidadas no estáticas se llaman clases internas .

La sintaxis general para declarar la clase anidada estática y la clase interna es la siguiente:

 class OuterClass { ... static class StaticNestedClass { ... } class InnerClass { ... } } 

Entendamos el concepto de clase interna a través de un programa Java.

InnerClassExample.java

 public class InnerClassExample { public static void main(String[] args) { System.out.println('This is outer class.'); } class InnerClass { public void printinner() { System.out.println('This is inner class.'); } } } 

Tipos de clases internas

Java proporciona los dos tipos de clases internas que son los siguientes:

Clase interna local

Es un tipo de clase interna que se define dentro de un bloque. Aquí bloque denota el cuerpo de un método (un grupo de declaraciones encerradas entre un par de llaves). Debido a que se define dentro de un bloque, también se le conoce como método de clase interna local. Estas son clases no estáticas porque pueden acceder a los miembros de instancia del bloque. Podemos definir las clases internas locales en el cuerpo de un método. Estas clases deben instanciarse en el bloque en el que están definidas.

Cuando compilamos un programa Java (un programa que contiene una clase interna), el compilador genera los dos archivos de clase, a saber Clase exterior y ExteriorClase.interna. Uno para la clase externa y el otro para la clase interna que contiene una referencia a la clase externa.

Entendamos el concepto de clase interna local a través de un programa Java.

OuterClass.java

 public class OuterClass { private void getValue() { //if you are using Java 7 make the variable final //if you are using Java 8 the code runs successfully int sum = 20; //declaring method local inner class class InnerClass { public int divisor; public int remainder; public InnerClass() { divisor = 4; remainder = sum%divisor; } private int getDivisor() { return divisor; } private int getRemainder() { return sum%divisor; } private int getQuotient() { System.out.println('We are inside the inner class'); return sum / divisor; } } //creating an instance of inner class InnerClass ic = new InnerClass(); System.out.println('Divisor = '+ ic.getDivisor()); System.out.println('Remainder = ' + ic.getRemainder()); System.out.println('Quotient = ' + ic.getQuotient()); } public static void main(String[] args) { //creating an instance of outer class OuterClass oc = new OuterClass(); oc.getValue(); } } 

Producción:

 Divisor = 4 Remainder = 0 We are inside the inner class Quotient = 5 

Clase interna anónima

Es un tipo de clase interna que es igual que las clases locales, pero la única diferencia es que la clase no tiene un nombre de clase y se crea un solo objeto de la clase. Hace que el código sea más conciso. Se usa si queremos usar la clase local una vez. Podemos crear clases anónimas de las dos formas siguientes:

matriz de clasificación java
  • Usando una interfaz
  • Al declarar la clase concreta y abstracta

Sintaxis:

 // the class may an interface, abstract or concrete class DemoClass obj = new DemoClass() { //methods //data members public void demomethod() { //statements } }; 

Si observamos la sintaxis anterior, vemos que es la misma que la invocación del constructor excepto que la clase tiene una definición contenida en el bloque.

AnonymousClassExample.java

 interface Score { int run = 321; void getScore(); } public class AnonymousClassExample { public static void main(String[] args) { // Myclass is hidden inner class of Score interface // whose name is not written but an object to it // is created. Score s = new Score() { @Override public void getScore() { //prints score System.out.print('Score is '+run); } }; s.getScore(); } } 

Producción:

 Score is 321 

Java también proporciona otro tipo de clase Java que se conoce como clase contenedora. Discutamoslo en detalle.

Clase contenedora

En Java, el término clase contenedora representa una colección de clases de Java que objetivan el tipo primitivo de Java. Significa que para cada tipo primitivo hay una clase contenedora correspondiente. Las clases contenedoras se utilizan para realizar la conversión de un tipo primitivo a un objeto y viceversa. La siguiente figura demuestra la jerarquía de clases contenedoras.

Tipos de clases en Java

La siguiente tabla representa el tipo primitivo y la clase contenedora correspondiente.

Tipo primitivo Clase contenedora
booleano Booleano
En t Entero
carbonizarse Personaje
doble Doble
flotar Flotar
largo Largo
byte Byte
corto Corto

Entendamos la clase contenedora a través de un programa Java.

WrapperClassExample.java

 public class WrapperClassExample { public static void main(String args[]) { byte x = 0; //wrapping byte primitive type into Byte object Byte byteobj = new Byte(x); int y = 23; //wrapping int primitive type into Integer object Integer intobj = new Integer(y); char c='m'; //wrapping char primitive type into Character object Character charobj=c; //printing values from objects System.out.println('Byte object byteobj: ' + byteobj); System.out.println('Integer object intobj: ' + intobj); System.out.println('Character object charobj: ' + charobj); } } 

Producción:

 Byte object byteobj: 0 Integer object intobj: 23 Character object charobj: m