¿Por qué las clases en java solo se pueden modificar con público?

En primer lugar, es una proposición falsa que las clases solo se pueden modificar con public. Cabe decir que solo hemos visto clases modificadas con public, y algunas clases no tienen modificadores de acceso. En este momento, el permiso de acceso es por defecto. En segundo lugar, las clases se dividen en clases externas y clases internas (clases internas). Las clases generales son clases externas y las clases internas deben ser generadas por clases externas, y las clases internas se pueden modificar con varios modificadores de acceso. Entonces, la pregunta se transforma en, ¿por qué no podemos usar privado y protegido para modificar clases externas?

Sabemos que en Java, los modificadores de acceso pueden modificar clases, métodos, variables y métodos de construcción.

Hay 4 tipos de derechos de acceso de mayor a menor

Dentro de la clase Este paquete Subpaquete Embalaje externo
público v v v v
protegido v v v X
defecto v v X X
privado v X X X

Usamos modificadores de acceso para modificar clases, solo para permitir que se acceda a las clases de acuerdo con varios permisos.

Si la clase externa usa modificación privada, otras clases no pueden acceder a ella y esta clase pierde su significado.

Si la clase externa está decorada con protected, parece que en comparación con la predeterminada, en base a la accesibilidad en el paquete, las subclases fuera del paquete también son accesibles. Sin embargo, si desea convertirse en una clase secundaria fuera del paquete, primero debe heredar la clase principal, pero la clase principal no se puede encontrar y no se puede heredar (la gallina o el huevo primero), el efecto es el mismo que el predeterminado y no es necesario que exista.

Sobre la clase interna:

Las clases internas se dividen en clases internas de miembros, clases internas locales, clases internas anónimas y clases internas estáticas.

Una clase interna miembro es una clase definida en otra clase y es el tipo más común de clase interna.

class Circle {
    
    
  double radius = 0;
   
  public Circle(double radius) {
    
    
    this.radius = radius;
  }
   
  class Draw {
    
       //内部类
    public void drawSahpe() {
    
    
      System.out.println("drawshape");
    }
  }
}

De esta manera, la clase Draw es como un miembro de la clase Circle, y Circle se llama una clase externa. La clase interna de miembros puede acceder incondicionalmente a todos los atributos y métodos de miembros de la clase externa (incluidos los miembros privados y los miembros estáticos).

La clase interna se puede modificar con privado, protegido, predeterminado, público y solo se puede acceder a la modificación privada en la clase externa.

Sobre la interfaz

public interface Comparable<T>{
    
    
  int compareTo(T other);
}

Todos los métodos de la interfaz pertenecen automáticamente a public, y no es necesario proporcionar la palabra clave public al declarar métodos en la interfaz.

Método de construcción modificado

En el patrón de diseño singleton, usamos privado para modificar el método de construcción para privatizar el constructor, lo que significa que la clase no puede instanciarse fuera de la clase. Una vez que se crea una instancia de la clase, proporciona un método para que el acceso externo devuelva el objeto de la instancia.

public class SingletonTest {
    
    
	public static void main(String[] args) {
    
    
		//测试
		Singleton instance = Singleton.getInstance();
		Singleton instance2 = Singleton.getInstance();
		System.out.println(instance == instance2); // true
		System.out.println("instance.hashCode=" + instance.hashCode());
		System.out.println("instance2.hashCode=" + instance2.hashCode());
	}
}

//饿汉式
class Singleton {
    
    
	//1. 构造器私有化
	private Singleton() {
    
    
	}
	
	//2.本类内部创建对象实例
	private final static Singleton instance = new Singleton();
	
	//3. 提供一个公有的静态方法,返回实例对象
	public static Singleton getInstance() {
    
    
		return instance;
	}

Algunas preguntas de entrevistas de alta frecuencia recopiladas en el último 2020 (todas organizadas en documentos), hay muchos productos secos, incluidos mysql, netty, spring, thread, spring cloud, jvm, código fuente, algoritmo y otras explicaciones detalladas, así como planes de aprendizaje detallados, entrevistas Clasificación de preguntas, etc. Para aquellos que necesitan obtener estos contenidos, agregue Q como: 11604713672

Supongo que te gusta

Origin blog.csdn.net/weixin_51495453/article/details/114753097
Recomendado
Clasificación