tipos que poo para modificadores los funcion ejemplos datos calificador acceso java abstract-class private

poo - que es un constructor en java



¿Por qué hay un modificador de acceso privado en una clase abstracta en Java, aunque no podemos crear una instancia de una clase abstracta? (4)

Sé que no es una buena práctica de codificación declarar un método como privado en una clase abstracta.

Yo no. ¿De dónde sacaste esa idea?

¿Cuál es su alcance dentro de una clase abstracta?

La clase abstracta.

Sé que no es una buena práctica de codificación declarar un método como private en una clase abstract . Aunque no podemos crear una instancia de una clase abstract , ¿por qué el modificador de acceso private disponible dentro de una clase abstract y cuál es su alcance dentro de una clase abstract ? ¿En qué escenario se usa el especificador de acceso private en una clase abstract ?

echa un vistazo a este código donde la clase de Vehicle es abstracta y el Car extiende.

package com.vehicle; abstract class Vehicle { // What is the scope of the private access modifier within an abstract class, even though method below cannot be accessed?? private void onLights(){ System.out.println("Switch on Lights"); } public void startEngine(){ System.out.println("Start Engine"); } }

Dentro está el mismo paquete creando una clase de Automóvil.

package com.vehicle; /* * Car class extends the abstract class Vehicle */ public class Car extends Vehicle { public static void main(String args[]){ Car c = new Car(); c.startEngine(); // Only startEngine() can be accessed } }


Dado que una clase abstracta puede contener funcionalidad (a diferencia de una interfaz), puede tener variables o métodos privados.

En tu ejemplo podrías hacer algo como

public void startEngine(){ injectFuel(); igniteSpark(); // etc. my understanding of engines is limited at best System.out.println("Start Engine"); } private void injectFuel() {} private void igniteSpark() {}

De esa manera, puede distribuir parte del trabajo a otros métodos (de modo que no tiene un método de Encendido del motor de 1000 líneas), pero no desea que los niños puedan llamar a inyectar combustible por separado ya que no tiene sentido fuera del contexto de startEngine (desea asegurarse de que solo se use allí).

O incluso más es posible que tenga un método privado que se llame en varios otros métodos públicos, con diferentes parámetros. De esta manera, evita escribir el mismo código dos veces o más en cada uno de los métodos públicos, y al agrupar el código común en un método privado se asegura que los niños no tengan acceso a él (como si no pudieran llamar parte del método público antes). ). Algo como esto:

public void startEngine() { dishargeBattery(50); System.out.println("Start Engine"); } public void startRadio() { dischargeBattery(20); } private void dischargeBattery(int value) { battery.energy -= value; //battery should probably be a private field. }

De esta manera, sus métodos pueden tener acceso a la batería, pero los niños no deberían meterse con ella, y usted no escribe la misma línea ( battery.energy -= value ) en ambos. Tenga en cuenta, sin embargo, que estos son ejemplos muy simples, pero si la batería de descarga fuera un método de 500 líneas, escribirlo en los otros dos métodos sería una molestia.


Es lo mismo que en una clase no abstracta, no hay diferencia.

Lo que significa que si nada en tu clase abstracta llama al método privado, entonces puedes eliminarlo del mismo modo, ya que no se llamará (dejando de lado algunos trabajos de reflexión malvados).

Por lo general, los métodos privados solo se usan como métodos de utilidad internos que tienen una tarea muy específica que los otros métodos de la clase usan para hacer su trabajo.


Se puede acceder al método solo desde la clase abstracta. Por ejemplo, podría tener una clase abstracta con un método public final que haga uso de un método auxiliar privado.