Comprensión profunda de paquetes y herencia en java

Paquete

Es una forma de organizar clases
El propósito principal de usar paquetes es asegurar la unicidad de las clases.

Especificación del paquete

El nombre de dominio generalmente está invertido y todo en minúsculas , por ejemplo: www.baidu.com
para que el paquete se pueda configurar así
Inserte la descripción de la imagen aquí

Importar paquete

Utilice la palabra clave de importación, seguida del paquete que desea importar.

    import java.util.Date;
    public class Test {
    
    
        public static void main(String[] args) {
    
    
            Date date = new Date();
        // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }

Acceso al paquete

  • público
  • privado
  • protegido
  • No escribir nada (permiso predeterminado) ———— solo se puede acceder en el mismo paquete

Paquetes de sistemas comunes

  1. java.lang: Clases básicas (String, Object) comúnmente utilizadas en el sistema, este paquete se importa automáticamente desde JDK1.1.
  2. java.lang.reflect: paquete de programación de reflexión java;
  3. java.net: Kit de desarrollo para programación en red.
  4. java.sql: Paquete de soporte para el desarrollo de bases de datos.
  5. java.util: es el paquete de herramientas proporcionado por java. (Colecciones, etc.) muy importante
  6. java.io: kit de desarrollo de programación de E / S.

Encapsulamiento

¿Qué es la encapsulación?
Utilice privado para modificar campos o métodos.

La importancia de la encapsulación radica en:
seguridad, de modo que el llamador de la clase reduce el costo de uso de la clase.

Paquete detallado antes de escribir el ensayo en clase y punto de objeto
Salto clases y objetos

heredar

Importancia: reducir la reutilización del código

extiende la palabra clave

A extiende B
significa que A hereda B

En este momento, B se llama clase base / clase padre / superclase
y A se llama subclase / clase derivada


Por ejemplo,
Dog hereda Animal
Bird hereda Animal

class Animal {
    
    
    public String name;
    public int age;

    public void eat() {
    
    
        System.out.println("Animal::eat()");
    }
}

class Dog{
    
    
    public String name;
    public int age;

    public void eat() {
    
    
        System.out.println("Dog::eat()");
    }
}

class Bird{
    
    
    public String name;
    public int age;

    public void eat() {
    
    
        System.out.println("Bird::eat()");
    }
    public void fly() {
    
    
        System.out.println("Bird::fly()");
    }
}

Solo necesitamos dejar que Dog y Bird extiendan Animal para evitar escribir campos y métodos repetidos, como este

class Animal {
    
    
    public String name;
    public int age;

    public void eat() {
    
    
        System.out.println(this.name + "::eat()");
    }
}

class Dog extends Animal{
    
    
}

class Bird extends Animal{
    
    
    public void fly() {
    
    
        System.out.println("Bird::fly()");
    }
}

Entonces, la pregunta es, ¿qué
heredan las clases secundarias de la clase principal?

heredarAdemás del método de construcciónEl contenido de todas las clases principales. Contiene campos o métodos modificados privados,
pero debe tenerse en cuenta que no se puede acceder a los modificados privados en las subclases.


¿Cuándo se establece la relación en herencia?

A es B La herencia debe usarse en este momento. Por
ejemplo, en el ejemplo anterior, un perro es un animal y un pájaro es un animal,
pero no puede ser un perro o un pájaro. De esta manera, la herencia no es necesario.


Java es herencia única, es decir, sólo se puede extender una clase.
Para resolver el problema de la herencia única, Java introduce interfaces. Continuaremos aprendiendo sobre interfaces más adelante.

palabra clave protegida

Hace poco descubrimos que si el campo se establece en privado, no se puede acceder a la subclase. Pero establecerlo en público viola nuestra intención original de "encapsulación". Lo
mejor de ambos mundos es la palabra clave protegida.

  • Para el llamador de la clase, no se puede acceder a los campos y métodos protegidos
  • Para la clase Subclase con Otras clases en el mismo paquete En otras palabras, los campos y métodos modificados protegidos son accesibles
//在animal包中
class Animal {
    
    
    protected String name;
    public int age;

    public void eat() {
    
    
        System.out.println(this.name + "::eat()");
    }
}
//在test包中
class Test extends Animal{
    
    
	public void func(){
    
    
		Animal animal = new Animal();
		System.out.println(animal.name);//错误!!这样调用时不行的
		System.out.println(super.name);//正确,调用父类的需用到super关键字
	}
}

Resumir las palabras clave de acceso restringido
Inserte la descripción de la imagen aquí

palabra clave final

Antes de aprender que el final puede modificar personajes

final int a = 10;

final también puede modificar la clase

final class A {
    
    }

Esto significa que la clase A es una clase sellada , lo que significa que la clase actual no se puede heredar.
Si no desea que otras clases lo hereden cuando configure la clase más adelante, puede usar la modificación final

super palabra clave

super y esto a menudo se preguntan juntos,
esto significaReferencia al objeto actual
Permítanme hablar sobre varios métodos de este primero.

  • this () llama a su propio constructor
  • método de acceso this.func ()
  • Atributo de acceso this.data
  • esto representa una referencia al objeto actual

súper medios para conseguirReferencia a una instancia de la clase padre
La subclase hereda la clase principal. Al construir la subclase, primero debeAyude a la clase principal a construir
Cómo ayudar a la construcción, dentro del método de construcción de la subclase,Llame al constructor de la clase padre

super (); // Muestra el método de construcción para llamar a la clase padre. Por lo tanto, el constructor no se hereda, sino que se llama en la subclase

class Animal {
    
    
    public String name;
    public int age;
    public Animal1() {
    
    

    }
    public Animal1(String name){
    
    

    }
    public void eat() {
    
    
        System.out.println(this.name + "::eat()");
    }
}

class Dog extends Animal{
    
    
    public Dog() {
    
    
        super();
    }
    public Dog(String name) {
    
    
        super(name);
    }
}

Nota:super no se puede utilizar en métodos estáticos, Porque el método de modificación estática no depende de ningún objeto, y super en sí mismo representa una referencia al objeto de la clase padre.

Orden de ejecución de la clase padre-hijo

class Animal {
    
    
    public String name;
    public int age;
    //静态代码块
    static {
    
    
        System.out.println("Animal::static{}");
    }
    //实例代码块
    {
    
    
        System.out.println("Animal::{}");
    }
    public Animal() {
    
    
        System.out.println("Animal()");
    }
    public Animal(String name){
    
    
        System.out.println("Animal(String)");
    }
    public void eat() {
    
    
        System.out.println(this.name + "::eat()");
    }
}

class Dog extends Animal1{
    
    
    static {
    
    
        System.out.println("Dog::static{}");
    }
    {
    
    
        System.out.println("Dog::{}");
    }
    public Dog() {
    
    
        super();
        System.out.println("Dog()");
    }
    public Dog(String name) {
    
    
        super(name);
        System.out.println("Dog(String)");
    }
}

class Bird extends Animal1{
    
    
    static {
    
    
        System.out.println("Bird::static{}");
    }
    {
    
    
        System.out.println("Bird::{}");
    }
    public Bird() {
    
    
        System.out.println("Bird()");
    }
}

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Dog dog = new Dog();
        System.out.println("========");
        Bird bird = new Bird();
    }
}

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/starry1441/article/details/113868411
Recomendado
Clasificación