Notas de estudo: polimorfismo e classes internas em java

Polimorfismo

l Polimorfismo é o conceito mais importante em orientação a objetos. Existem duas manifestações em Java:

1. Sobrecarga de método (sobrecarga) e reescrever (sobrescrever).

2. Polimorfismo de objeto - pode ser aplicado diretamente a classes e interfaces abstratas.

Variáveis de referência Java tem dois tipos: tipo de tempo de compilação e tipo de tempo de execução . O tipo de tempo de compilação é determinado pelo tipo usado quando a variável é declarada, e o tipo de tempo de execução é determinado pelo objeto realmente atribuído à variável.

Se o tempo de execução e o tipo de tempo de compilação do tipo inconsistente, há polimorfismo ( polimorfismo )
objeto polimórfico L - em Java, uma subclasse de objeto pode substituir o objeto usando a classe pai

Uma variável só pode ter um certo tipo de dados

Uma variável de tipo de referência pode apontar para (fazer referência) muitos tipos diferentes de objetos

Pessoa p = nova Pessoa ();

Person e = new Student (); // Variável e do tipo Person aponta para um objeto do tipo Student

Ele pode ser visto como uma subclasse especial da classe pai, de modo que a referência ao tipo de classe pai da subclasse de objeto pode apontar: transição para cima ( upcasting ).
Se uma variável de tipo de referência é declarada como o tipo da classe pai, mas na verdade se refere ao objeto da subclasse, então a variável não pode mais acessar as propriedades e métodos adicionados na subclasse

Aluno m = novo Aluno ();

m.school = " pku "; // Legal , a classe Aluno tem variáveis ​​de membros da escola

Pessoa e = novo aluno ();

e.school = " pku "; // Ilegal , a classe Person não tem variável de membro da escola

Os atributos são determinados em tempo de compilação.Em tempo de compilação, e é do tipo Pessoa , e não há variável de membro da escola , então ocorre o erro de compilação.

Classe interna

Em Java, a definição de uma classe pode ser localizada dentro de outra classe.A primeira é chamada de classe interna e a última é chamada de classe externa.

A classe interna é geralmente usada na classe ou bloco de instrução em que é definida e o nome completo deve ser fornecido ao fazer referência a ela externamente.

O nome da classe Inner não pode ser igual ao nome da classe que a contém;

A classe interna pode usar os dados privados da classe externa, porque é um membro da classe externa e os membros da mesma classe podem acessar uns aos outros. A classe externa precisa acessar os membros da classe interna, classe interna, membro ou objeto da classe interna.

Classificação: classe interna de membro ( classe interna de membro estático e classe interna de membro não estático)

Classe interna parcial (modificador à parte), classes internas anônimas

 class A {
    
    

 private int s;

 public class B{
    
    public void mb() {
    
    

 s = 100;  

 System.out.println("在内部类B中s=" + s);} }

 public void ma() {
    
    

 B i = new B();

 i.mb();

 } }public class Test {
    
     

 public static void main(String args[]){
    
    

​     A o = new A();

​     o.ma();

 }  } 

Classe interna **** como membro da classe:

Pode ser declarado como final o

Ao contrário das classes externas, a classe Inner pode ser declarada como privada ou protegida ;

A classe interna pode ser declarada como estática , mas as variáveis ​​de membro não estáticas da classe externa não podem mais ser usadas neste momento;

Classe interna como classe:

Pode ser declarado como uma classe abstrata , para que possa ser herdado por outras classes internas

[Nota] Membros de classes internas não estáticas não podem ser declarados como estáticos, e membros estáticos só podem ser declarados em classes externas ou classes internas estáticas.
Uma classe interna anônima não pode definir nenhum membro, método e classe estática, apenas uma instância da classe interna anônima pode ser criada. Uma classe interna anônima deve estar atrás de new e usá-la para implementar implicitamente uma interface ou implementar uma classe.

novo construtor de classe pai (lista de argumentos) | interface de implementação () {

// A parte do corpo da classe da classe interna anônima

}

interface A{
    
    

 public abstract void fun1();

}

public class Outer{
    
    

 public static void main(String[] args) {
    
    

 new Outer().callInner(new A(){
    
    //接口是不能new但此处比较特殊是子类对象实现接口,只不过没有为对象取名

 public void fun1() {
    
    

 System.out.println(“implement for fun1");

 }

 });// 两步写成一步了

 }

 public void callInner(A a) {
    
    

 a.fun1();

 }

} 

Acho que você gosta

Origin blog.csdn.net/qq_44909275/article/details/105414167
Recomendado
Clasificación