Este artigo estuda principalmente classes multiplexadas na programação Java. Então, o que é uma classe multiplexada e qual é o seu uso? Aqui está uma introdução detalhada.
Depois de ler a entrevista com Luo Luo Shengyang, não pude deixar de admirá -lo. Ele era muito jovem. Eu pensei que tinha a mesma idade que Luo Yonghao, e conheci um dos caras grandes que não eram uma programação do ensino médio e júnior e sênior. Após a entrevista, descobri que Luo Luo também era uma pessoa que deu um passo de cada vez. Não diga que é difícil de fazer ou você não pode fazer isso. Você não tentou ou persistir.
Se você não pode voar, então corra, se você não pode correr, então ande, se você não pode andar, então rasteje, mas
Faça o que fizer, você precisa seguir em frente-Martin Luther King.
O título de aula de reutilização era difícil de entender no início. Mais tarde, fui ler a versão original em inglês do livro. De fato, o título estava reutilizando aulas e reutilizar aulas significava "usar coisas prontas". De fato, os dois métodos de implementação são frequentemente ouvidos em Java - combinação e herança.
(1) Combinação
O papel do Has-A.
classe pública TV {Show Show; public string tostring () {return "showgirl"; }} classe mostra {} Vamos mencionar o método da tostragem. Quando você precisa de string e você é um objeto, o compilador chama o método de tostragem do objeto.
Há um programa na TV. O show atual não é inicializado e é nulo. O método de show não pode ser chamado.
A combinação tem um efeito poderoso. De uma perspectiva orientada a objetos, se você estiver criando uma aula de carro, poderá combinar facilmente vidro, luz, motor e outros componentes do carro usando a combinação.
(2) herança
IS-A
pacote com.myown.iaiti; public classe pai {public int i; void get () {system.out.println ("pai");}} pacote filho; importar com.myown.iaiti.*; public classe filho estende o pai {pai f = novo pai (); int j = fi; filho; filho = novo filho;); get () {super.get (); System.out.println ("Son");}}Há um problema com as permissões de acesso ao pacote aqui. Se o público não for adicionado, o padrão é acessar o membro no pacote. Diferentes acessos para o pacote, ou seja, o método de acesso de membro do filho em Son é invisível. E as palavras públicas são visíveis, então o acesso é obtido.
A parte privada não pode ser herdada e pertence à classe pai privada, enquanto a parte pública será herdada e os métodos que precisam ser modificados podem ser reescritos. Os atributos a serem adicionados podem ser adicionados separadamente.
Além disso, se o método público pai original for reescrito, se o método público original do pai não adicionar público, não reduzirá a visibilidade do método herdado do pai, o que significa que a visibilidade do método herdado na classe dos pais não pode ser reduzida. Super se refere à classe dos pais, a saber, pai.
Outro ponto é que, de fato, todas as classes em Java herdam implicitamente a classe de objeto. Objeto é a classe pai e outras classes são subclasses. Os estrangeiros gostam de falar sobre isso como a classe base. As subclasses também são chamadas de classes exportadas ou derivadas.
(3) agente
Há uma maneira relativamente difícil de entender no modelo de design - o modelo do agente. O autor fala sobre isso de maneira muito interessante. Agente é a doutrina da média de combinação e herança.
filho do pacote; classe pai {public void get () {System.out.println ("pai"); }} public class filho estende o pai {public static void main (string [] args) {pai f = novo pai (); f.get (); }} classe PadroProxy {private pai f = novo pai (); public void get () {f.get (); }}Se você tratar diretamente o pai como membro, o método do pai será exposto a esta classe. Então podemos usar uma aula de proxy como o padreproxy. Eu defino como obter o método Get sozinho. Sei que está chamando o método de Get do Pai, mas a pessoa que usa meu proxy não sabe. Eu apenas digo a ele que, se você quiser usá -lo, basta usar o método GET do proxy. O encapsulamento é refletido. O exposto acima é apenas um exemplo simples de batida aleatória.
(4) Reescrever e recarregar
classe pai {public void get (strings s) {System.out.println ("pai"); } public void get (boolean b) {System.out.println ("boolean"); }} classe pública filho estende o pai {@Override public void get (strings s) {System.out.println ("pai"); } // @Override // haverá uma mensagem de erro porque a classe pai não possui esse método, não é uma reescrita do vazio público get (int i) {System.out.println ("Sonint"); } public static void main (string [] args) {filho s = new Son (); S.Get ("D"); s.get (falso); s.get (1); }}A reescrita é re-escrever o método da classe pai. Se não houver reescrita ou sobrecarga, quando a subclasse chamar um método que a subclasse não possui, ele está realmente chamando a classe pai.
A sobrecarga é o mesmo nome do método, mas o nome do parâmetro é diferente. Para impedir que você sobrecarregue incorretamente, você pode adicionar a tag @Override, o que solicitará que você não reescreva o método.
(5) protegido
Explicação detalhada do código de controle para permissões de acesso à programação Java
Escrevi o artigo anterior com antecedência porque não falava sobre herança antes.
Você pode simplesmente considerar protegido como a herança da classe dos pais com o filho, e outras classes não inetárias não podem ser acessadas.
(6) palavra -chave final
Adicionar o tipo básico da palavra -chave final significa que essa variável não mudará após a inicialização. Semelhante à definição C, você deseja que uma variável neste programa seja esse valor sem alterar. Você pode usar o final.
classe pública Son {int Age = 2; public static void main (string [] args) {final int i = 1; // i = 2; O valor não pode ser mais alterado, filho final, filho = novo filho (); // filho = novo filho (); // O SON final da variável local não pode ser atribuído. // Deve estar em branco e não usar uma atribuição composta // A variável local SON modificada por final não pode ser atribuída, deve estar vazio ou não alocada novamente SON.AGE = 4; // Embora a referência seja constante, o próprio objeto pode ser alterado. } alteração void (final int c) {// c = this.age; Não é possível atribuir um novo valor porque o valor determina apenas a referência do objeto quando o método passa o parâmetro e determina que a referência do objeto é semelhante a este // Age ++; Não pode ser alterado}} A estática é originalmente inicialização estática e é usada com o final para ocupar um espaço de armazenamento que não pode ser alterado.
A final estática é uma constante durante o período de compilação. Os nomes constantes são tradicionalmente nomeados de acordo com as constantes de c. Todos são letras maiúsculas e palavras são separadas por sublinhados.
Valor final estático_one = 1;
Ao modificar o método final
public class Print {Final void não poderiprint () {System.out.println (1); }} classe pública Printson estende a impressão {// void Can'tPrint () {} // não pode ser reescrita porque é modificada pelo vazio estático público final (string [] args) {Printson ps = new Printson (); ps.CannotPrint (); }}Pode ser considerado uma propriedade não modificada (herança ancestral) que a classe pai exige que a classe infantil herde. O privado é especificado implicitamente como final, porque o privado não oferece herança. Isso é mais privado do que fornecer herança, mas não a modificando.
A propósito, limpe as permissões.
Quando a Final Modifys uma classe, é para impedir que essa classe seja herdada.
(7) herança e inicialização
A questão do pedido aqui é uma pergunta interessante. Veja exemplos.
classe avô {private static int i = print (); private static int print () {System.out.println ("g"); retornar 1; }} Classe Pai estende o avô {private static int i = print (); private static int print () {System.out.println ("f"); retornar 1; }} classe pública filho estende o pai {private static int i = print (); private static int print () {System.out.println ("s"); retornar 1; } public static void main (string [] args) {System.out.println ("primeiro"); }} O resultado da impressão é primeiro? Errado.
Embora o método principal seja executado, vejo que o filho, que requer inicialização estática, não o possui, mas o resultado é S, primeiro?
Há também o problema de inicialização. O filho herda o pai, então o compilador carregará o pai e inicializará i. Se o pai herdar o avô, o compilador carregará o avô, semelhante à recursão.
O último inicializado é o avô i.
Portanto, o resultado final é: G, F, S, primeiro.
Resumir
O exposto acima é toda a explicação detalhada do código de multiplexação de programação Java neste artigo, espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!