diría que no entiendo muy bien la manera de Java (o cualquier otro lenguaje orientado a objetos) funciona.
En lenguajes orientados a objetos, clases representan diferentes tipos de cosas que pueda necesitar en todo su programa. Es mejor ilustarte esto con un ejemplo. Digamos que en tu programa vas a modelar autos.
usted tendría una clase de coches, y crearía un nuevo objeto (una nueva instancia) de la clase de coches para representar cada coche nuevo que usted necesita. El automóvil está constituido por diferentes componentes, usted tiene ruedas, un motor, ventanas, etc. Por lo tanto, tendría clases para cada uno de estos componentes, y cada objeto del automóvil contendría su propio conjunto de objetos de todas las diferentes clases, es decir:
Car1 {
motor1
window1.1, window1.2
wheel1.1,wheel1.2
}
Car2 {
motor2
window2.1, window2.2
wheel2.1,wheel2.2
}
En este caso, debe definir cada uno de los componentes de los automóviles como campos de clase. Estos campos son para todos los efectos 'globales' ya que se puede acceder desde cualquiera de los métodos de esa clase. El detalle que parece faltar es que cada nuevo objeto de esta clase tiene su propio conjunto de campos y métodos. No los comparten, por lo que cada motor, conjunto de ruedas, etc., pertenece a una instancia de la clase Car. Entonces, si en la clase de automóvil tiene un método llamado, digamos, deleteWindows(), que eliminaría todas las ventanas, y llamó a ese método en car2, esto no eliminaría las ventanas de car1.
Otro detalle importante es que se puede definir estas variables con varios prefijos '' (métodos también). Primero tiene público y privado (protegido, pero no entraré en eso). Al declarar una variable como privada, usted dice que el único objeto que puede acceder y cambiar esa variable es el propietario. Por otro lado, se puede acceder y cambiar una variable pública por cualquier otro objeto. Son accesibles, pero tiene que decir explícitamente que desea cambiar la variable de ese objeto (escribiendo objectsName.variable, en nuestro caso car1.motor).
También puede tener variables/métodos que son compartidos por todas las instancias de una clase. Para hacer esto, los declaras como estáticos (estos pertenecen efectivamente a la clase y no a ningún objeto de esa clase en particular). Privado/público todavía se aplica, una variable estática privada solo es accesible por instancias de esa clase (y métodos estáticos de la misma clase), mientras que las públicas son accesibles por cualquier otra clase/objeto. Para acceder a ellos desde fuera de la clase a la que pertenecen, use ClassName.variable/method (así Car.variable en el ejemplo anterior).
A veces es posible que desee tener una clase que no tendría sentido crear una instancia de. Encuentro que a menudo necesito crear una clase de Matemáticas que contenga varios operadores matemáticos que quiero usar a lo largo de todo el programa. No tiene sentido crear un objeto Maths, por lo que simplemente definiría todos sus métodos como "públicos estáticos" y accederá a ellos siempre que lo necesite en sus otras clases.
espero haber clreaded su duda. De cualquier manera, le sugiero que lea un poco sobre programación orientada a objetos, tal vez obtenga un libro que enseñe Java con un enfoque inicial fuerte en orientación a objetos (OO), ya que aunque no es un concepto difícil de entender, podría ser difícil acostumbrarse y programar correctamente en un idioma OO si proviene de un fondo no OO.
Es posible que desee examinar BlueJ. Es un IDE de Java que básicamente te obliga a entender y utilizar la programación OO. No es algo que sugiera usar durante demasiado tiempo, pero podría ser un buen lugar para comenzar hasta que obtenga una buena comprensión de los principios básicos de OO.
Zepee
Conozco las diferencias entre campos estáticos y no estáticos y que cada objeto tiene su propio estado. Déjame decir lo contrario. Digamos que tienes 2000 líneas de código C en un archivo que son básicamente muchas funciones, ¿es bueno tener en este archivo las variables globales que usarán estas funciones? Por lo que sé, la respuesta es no (ya que no sabes qué funciones escribe/lee cada variable global). Lo mismo sucede con las clases, una clase puede tener 2000 líneas de código, en este ámbito de clase los campos son como variables globales. ¿Correcto?¿No es algo malo como el ejemplo del código C? –
No tengo mucha experiencia fuera de los lenguajes de OO, pero parece que el problema al que apunta es el hecho de no saber qué cambia lo que se aplica a las variables públicas. Debería preocuparse por qué objetos pueden acceder directamente y cambiar sus variables. Este es uno de los principios básicos de OOP, encapsulación, que establece que los objetos/clases solo deben saber lo que hace todo el resto, pero no cómo lo hacen. Por lo tanto, la práctica común de hacer que los campos sean privados y proporcionar getters/setters solo donde cada objeto puede controlar cuán transparente es para el mundo exterior. – Zepee
Sin embargo, dentro de cada clase, necesita transparencia total. ¿Qué tan bueno es que exista si ni siquiera usted sabe cómo es? En otras palabras, sin variables de clase, ¿cómo distinguirías el objeto A del objeto B? No debe preocuparse por tener varios métodos en su objeto para acceder a sus campos, solo tiene otros objetos que acceden a sus campos. Las variables de clase no solo no son malas, ya que son necesarias, son lo que define un objeto, y poder tener varias instancias de una clase, cada una con su propio conjunto de atributos es exactamente el motivo por el que se crearon los lenguajes OO. – Zepee