JavaEE enfadonho da entrada ao abandono (9) Encapsulamento detalhado e polimorfismo detalhado

índice

1. Encapsulamento

1. O papel e o significado do encapsulamento

2. Vantagens específicas do encapsulamento na programação:

3. A realização do encapsulamento - o uso de símbolos de controle de acesso

4. Dois detalhes sobre protegidos:

5. Regras simples para encapsulamento em desenvolvimento

6.javaBean

2. Polimorfismo

1. Conceito e implementação de polimorfismo

2. Os principais pontos do polimorfismo

3. Código de amostra


1. Encapsulamento

1. O papel e o significado do encapsulamento

Quero assistir TV, basta pressionar o botão e mudar de canal. É necessário entender a estrutura interna da TV? É necessário tocar no tubo de imagem? Para facilitar o uso da TV, o fabricante encapsula todos os detalhes internos complicados e expõe apenas interfaces simples, como o botão liga / desliga . Não precisamos nos preocupar sobre como a implementação interna específica é alcançada. O que o usuário precisa saber é exposto, e tudo o que o usuário não precisa saber é escondido.Isso é o encapsulamento. Para ser mais profissional, o encapsulamento é combinar as propriedades e operações do objeto em um todo independente e ocultar os detalhes de implementação interna do objeto tanto quanto possível. O design do nosso programa deve buscar "alta coesão, baixo acoplamento". Alta coesão significa que os detalhes da operação de dados internos da classe são concluídos por si próprios, e interferência externa não é permitida; baixo acoplamento significa que apenas um pequeno número de métodos são expostos para uso externo e é conveniente para chamadas externas, pois tanto quanto possível.

2. Vantagens específicas do encapsulamento na programação:

Melhore a segurança do código.
Melhore a capacidade de reutilização do código.
"Alta Coesão": Encapsula detalhes para facilitar a modificação do código interno e melhorar a capacidade de manutenção.
"Baixo acoplamento": simplifica as chamadas externas, facilita o uso de chamadores e facilita a expansão e a colaboração.

3. A realização do encapsulamento - o uso de símbolos de controle de acesso

Java usa "símbolos de controle de acesso" para controlar quais detalhes precisam ser encapsulados e quais detalhes precisam ser expostos. Os quatro tipos de "símbolos de controle de acesso" em Java são privado, padrão, protegido e público. Eles ilustram o encapsulamento orientado a objetos, portanto, devemos usá-los para minimizar os direitos de acesso o máximo possível para melhorar a segurança. O seguinte descreve seus direitos de acesso em detalhes. O escopo de sua autoridade de acesso é mostrado na figura abaixo.

(1) privado expresso privado, somente sua própria classe pode acessar
(2) padrão indica nenhuma modificação de modificador, somente classe no mesmo pacote pode acessar
(3) representação protegida pode ser uma subclasse de classe com um pacote e outros pacotes visitam

Observação: a diferença entre estático público e estático:

Na verdade, é a diferença das permissões de acesso, uma é pública e a outra é padrão.

4. Dois detalhes sobre protegidos:

1. Se a classe pai e a classe filha estiverem no mesmo pacote, a classe filha pode acessar os membros protegidos da classe pai e os membros protegidos do objeto da classe pai.
2. Se a subclasse e a classe pai não estiverem no mesmo pacote , a subclasse pode acessar os membros protegidos da classe pai, mas não os membros protegidos do objeto da classe pai .

por exemplo:

Primeiro, as duas classes estão em pacotes diferentes.

Código:

Test1.java

public class Test1 {
    private int testPrivate=100;
    int testDefault=200;
    protected int testProtected=300;

    public void test(){
        System.out.println(this.testPrivate);//只有本类可以用私有成员
        System.out.println(this.testDefault);//同一个包的类就能用默认成员
    }
}

Test2.java

import com.company.Test.a.Test1;

public class Test2 extends Test1{
    public void fun(){
        System.out.println(super.testProtected);//子类可访问父类的protected成员
    }

    public static void main(String[] args) {
        Test1 test1=new Test1();
        test1.test();
        Test2 test2=new Test2();
        test2.fun();
        //System.out.println(test.testProtected); 报错,即不能访问父类对象的protected成员

    }

}

Resultado:

100
200
300

5. Regras simples para encapsulamento em desenvolvimento

Geralmente, são utilizadas permissões de acesso privado.
Fornece métodos get / set correspondentes para acessar atributos relacionados. Esses métodos são geralmente modificados publicamente para fornecer atribuição de atributos e operações de leitura (nota: o método get de variáveis ​​booleanas começa com is!).
Alguns métodos auxiliares que são usados ​​apenas nesta classe podem ser decorados com private, e espera-se que os métodos chamados por outras classes sejam decorados com public.

6.javaBean

Um exemplo simples de javaBean:

A função pode ser gerada diretamente clicando com o botão direito - "Gerar, e você também pode usar a tecla de atalho Alt + Insert para abrir rapidamente Gerar. A ideia é muito inteligente. Se você não usar o botão direito para gerar diretamente em um set ou get e o prompt da função de geração de atalho correspondente aparecerá.Eu tenho que dizer que a ideia é muito inteligente.

public class Person {
    private String age;
    private String name;
    private boolean flag;

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }
}

2. Polimorfismo

1. Conceito e implementação de polimorfismo

O polimorfismo se refere à mesma chamada de método, que pode ter comportamentos diferentes devido a objetos diferentes. Na vida real, o mesmo método, a implementação específica será completamente diferente. Por exemplo: o mesmo método de chamar as pessoas de "descanso", Zhang San está dormindo, Li Si está viajando, o professor Gao Qi está digitando códigos e o professor de matemática está resolvendo problemas de matemática; o mesmo está chamando as pessoas de "comer", os chineses use os pauzinhos Nas refeições, os britânicos comem com garfo e faca, e os indianos comem com as mãos.

2. Os principais pontos do polimorfismo

(1) Polimorfismo é polimorfismo de método, não polimorfismo de atributo (polimorfismo não tem nada a ver com atributos)
(2) A existência de polimorfismo deve ter 3 condições necessárias: herança, reescrita de método e referências de classe pai apontando para objetos de subclasse.
(3) Depois que a referência da classe pai aponta para o objeto da classe filha, use a referência da classe pai para chamar o método sobrescrito pela classe filha.Neste momento, ocorre polimorfismo.

3. Código de amostra

Experimente os benefícios do polimorfismo por meio do código: se não houver polimorfismo, alguns lugares precisam de muita reescrita!

Também existe algum conhecimento sobre transformação de tipo, e li a propósito.

public class Animals {
    public void shout(){
        System.out.println("叫了一声!");
    }

    //用static声明,animalShout()就是类方法,所以可以直接用函数名调用!!!!
    public static void animalShout(Animals a){ //到了这里相当于将传入的具体的动物类转化为Animals类
        a.shout();//这里会调用传入的具体的动物类的shout()函数
    }

    public static void main(String[] args) {
        Cat cat=new Cat();
        cat.catchMouse();
        animalShout(cat);
        //Dog dog=(Dog)cat;转换不了
        Animals a=new Dog();//向上类型转换,自动的
        Dog dog=(Dog)a;//强制类型转换,向下类型转换
        dog.guard();
        //报错,因为此时a已经转为Dog类型了,所以不能转换为Cat
        //Cat cat1=(Cat)a;
        //cat1.catchMouse();
    }
}

//多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
class Dog extends Animals{
    @Override
    public void shout() {
        System.out.println("汪汪汪!");
    }

    public void guard(){
        System.out.println("狗看门!");
    }
}

class Cat extends Animals{
    @Override
    public void shout() {
        System.out.println("喵喵喵");
    }

    public void catchMouse(){
        System.out.println("猫抓老鼠!");
    }
}

class Mouse extends Animals{
    @Override
    public void shout() {
        System.out.println("吱吱吱");
    }
}

Resultado:

猫抓老鼠!
喵喵喵
狗看门!

 

 

 

 

 

 

 

Acho que você gosta

Origin blog.csdn.net/weixin_44593822/article/details/115358852
Recomendado
Clasificación