Siempre hemos definido clases para crear objetos. Los objetos son entidades con funcionalidad, mientras que las clases son clasificaciones de tipos de objetos. Este es un concepto básico de la orientación a objetos.
En herencia, tratamos las clases como materias ampliables, lo que mejora nuestra comprensión de las "clases".
Hay mucho más que discutir sobre la clase en sí. Seguiremos profundizando
miembros de datos estáticos
Hay algunos datos que se utilizan para expresar el estado de la clase. Por ejemplo, en la clase Humana, podemos usar "población" para representar el número total de objetos en la clase Humana. "Población" describe directamente el estado de una clase, no un objeto.
La clase humana tiene una población de 8.
Todos los objetos de la clase comparten los datos de "población". Estos datos se denominan miembros de datos de clase (campo de clase).
En la definición de clase, usamos la palabra clave estática para declarar miembros de datos de clase, como por ejemplo:
Copie el código de código de la siguiente manera:
claseHumano
{
/**
* constructor
*/
humano público (int h)
{
esta.altura = h;
}
/**
*accesor
*/
público int getHeight()
{
devolver esta altura;
}
/**
* mutador
*/
altura de crecimiento del vacío público (int h)
{
esta.altura = esta.altura + h;
}
/**
*aliento
*/
aliento vacío público ()
{
System.out.println("hu...hu...");
}
altura interna privada;
población int estática privada;
público estático booleano is_mammal = verdadero;
}
Definimos dos miembros de datos de clase: población e is_mammal. Todos los objetos humanos comparten datos de población; el atributo is_mammal (es un mamífero) de cualquier objeto humano es verdadero.
Los miembros de datos de la clase también deben establecer permisos de acceso. Para los miembros de datos de clase declarados como públicos, se puede acceder a ellos directamente desde el exterior usando class.field u object.field (si existe un objeto de esta clase). Ambos métodos de acceso son razonables porque los miembros de datos de la clase pueden considerarse como atributos de la clase y como atributos compartidos por todos los miembros. Si un miembro de datos de clase se define como privado, solo se puede acceder al miembro de datos de clase desde dentro de la clase.
(Is_mammal está configurado como público arriba solo para demostración. Esto es bastante peligroso. Si alguien usa Human.is_mammal=false;, todos los humanos sufrirán. Nuevamente, el principio básico es configurar los datos como privados tanto como sea posible).
método estático
También podemos tener métodos de clase, que son métodos declarados como estáticos. Los métodos de clase representan acciones que una clase puede implementar y las operaciones no involucran un objeto específico. Si un método se declara estático, solo puede llamar a datos y métodos estáticos, pero no a datos y métodos no estáticos.
De hecho, en un método estático, no se pasarán implícitamente estos y superparámetros. No tenemos forma de hacer referencia a los datos y métodos que pertenecen al objeto (que es exactamente lo que queremos).
Con base en lo dicho anteriormente, tenemos la siguiente relación:
Una línea de puntos roja indica inaccesibilidad. En otras palabras, no se puede acceder a los datos del objeto mediante métodos de clase.
A continuación agregamos un método estático getPopulation(), que devuelve una población de datos estáticos:
Copie el código de código de la siguiente manera:
claseHumano
{
/**
* constructor
*/
humano público (int h)
{
esta.altura = h;
}
/**
*accesor
*/
público int getHeight()
{
devolver esta altura;
}
/**
* mutador
*/
altura de crecimiento del vacío público (int h)
{
esta.altura = esta.altura + h;
}
/**
*aliento
*/
aliento vacío público ()
{
System.out.println("hu...hu...");
}
altura interna privada;
/*
* método estático, población de acceso
*/
público estático int getPopulation()
{
devolver población.humana;
}
población int estática privada;
booleano estático privado is_mammal = true;
}
Al llamar a un método de clase, podemos llamarlo mediante class.method() o object.method(). Por ejemplo, utilice la siguiente prueba de clase de prueba:
Copie el código de código de la siguiente manera:
prueba de clase pública
{
principal vacío estático público (String [] argumentos)
{
System.out.println(Human.getPopulation());
Humano aPersona = nuevo Humano(160);
System.out.println(aPerson.getPopulation());
}
}
Llamamos al método de clase getPopulation() fuera de la definición de clase de dos maneras.
Los métodos de objeto modifican los datos de la clase.
Vemos que los métodos de objeto pueden acceder a los datos de la clase. Este es un concepto muy útil. El estado de una clase puede cambiar con los objetos. Por ejemplo, la "población" debería aumentar en 1 a medida que se crea un objeto. Podemos modificar los datos de "población" de la clase en los métodos del objeto. Accedemos a los miembros de datos de la clase en el siguiente constructor. El método de construcción aquí es un método no estático, es decir, un método de objeto:
Copie el código de código de la siguiente manera:
claseHumano
{
/**
* constructor
*/
humano público (int h)
{
esta.altura = h;
Población.humana = Población.humana + 1;
}
/**
*accesor
*/
público int getHeight()
{
devolver esta altura;
}
/**
* mutador
*/
altura de crecimiento del vacío público (int h)
{
esta.altura = esta.altura + h;
}
/**
*aliento
*/
aliento vacío público ()
{
System.out.println("hu...hu...");
}
altura interna privada;
/*
* método estático, población de acceso
*/
público estático int getPopulation()
{
devolver población.humana;
}
población int estática privada;
booleano estático privado is_mammal = true;
}
Cada vez que creamos un objeto, modificamos los datos de la clase a través del método de construcción del objeto y aumentamos los datos de la clase de población en 1. De esta manera, la población puede reflejar la cantidad total de objetos que pertenecen a esta clase en tiempo real (puede crear varios objetos en Prueba y luego imprimir Human.population).
Además del ejemplo de constructor dado anteriormente, también podemos acceder a datos de clase en métodos de objetos ordinarios.
final
El significado básico de la palabra clave final es: Estos datos/método/clase no se pueden cambiar.
1. Dato final de tipo básico: valor constante, que sólo se puede asignar una vez y no se puede volver a modificar.
2.Método final: este método no se puede anular. Los métodos privados utilizan de forma predeterminada los métodos finales.
3.Clase final: esta clase no se puede heredar.
Los objetos de tipos ordinarios también pueden tener la palabra clave final, lo que significa que la referencia del objeto (referencia) ya no se puede modificar. Es decir, la referencia sólo puede apuntar a un objeto. Sin embargo, el contenido del objeto puede cambiar (similar a los punteros estáticos en C). Cubriremos las referencias a objetos más adelante.
Si un tipo básico de datos es final y estático, entonces almacena solo una copia del valor fijo. Esto es excelente para almacenar constantes como pi.
Resumir
campo estático, método estático
clase.static_method()
final