Fundação Java (entendimento de classes e interfaces abstratas)

1. Características de classes abstratas e interfaces.

Classe abstrata: defina a função comum e herda a classe abstrata; todos os métodos abstratos na classe abstrata devem ser implementados.

  • As classes abstratas e os métodos abstratos precisam ser modificados por resumo. Métodos abstratos devem ser definidos em classes abstratas
  • Classes abstratas não podem criar objetos diretamente (razão: chamar métodos abstratos não faz sentido)
  • Somente após cobrir todos os métodos abstratos da classe abstrata, suas subclasses podem criar objetos. Caso contrário, a subclasse também deve ser uma classe abstrata.

Interface: para escalabilidade. (Quem precisa dessa função, entregue a qualquer um)

  • Contém classes especiais para declarações de função.
  • Formato da definição: nome da interface da interface pública {} Use o formato: classe A implementa o nome da interface {}
  • As variáveis ​​de membro podem ser definidas na interface, mas as variáveis ​​podem ser apenas variáveis ​​finais e são estáticas. Modificador padrão: final estático público.
  • Os métodos podem ser definidos na interface, mas apenas métodos abstratos.
  • Não há construtor na interface e não é possível criar pares de objetos.
  • As subclasses devem substituir todos os métodos abstratos na interface antes que possam ser instanciados.

2. Detalhes

Classe abstrata

  • A classe abstrata deve ser a classe pai
  • Métodos abstratos não podem ser definidos em classes abstratas (ou seja: métodos estáticos podem ser usados ​​diretamente por subclasses)
  • Palavras-chave não podem ser usadas com privado e final. (As classes declaradas finais não podem ter subclasses, as particulares não podem ser substituídas)

Interface

  • Herança múltipla pode ser usada entre várias interfaces para herança múltipla
  • Classe pode implementar múltiplas interfaces

Exemplo de código:

package day0526;

/**
 * 1、类可以实现多个接口
 * 必须实现接口的所有抽象方法
 * 注:可以实现部分方法,但该类必须是抽象类
 * 2、接口可以实现多继承
 */
//多实现
public class demo1 implements Inter1,Inter {
    public void show(){

    }
}
//多继承
interface Inter extends Inter1,Inter2{
    //定义变量默认修饰符public static final
    int a=10;
    //定义方法默认修饰符public abstract
    void show();
    //接口中不允许有构造方法
}
interface Inter1{

}
interface Inter2{

}

A escolha dos dois

  • Escolha a interface primeiro e use as classes abstratas o mínimo possível
  • Você precisa definir o comportamento da subclasse e fornecer a função comum para a subclasse antes de escolher a classe abstrata.

3. Caso:

Para conseguir isso, primeiro analisamos.

Em seguida, desenhe uma figura para analisar o relacionamento entre eles, a conexão entre cada objeto e suas propriedades e métodos.

Após a análise, use o código para alcançar.

// Defina a interface

interface Learnenglish {

resumo público público learnspeaking ();

}

// Classe abstrata pública (pessoa)

classe abstrata Person1 {

nome de string privado;

int int privado;

public Person1 (nome da string, int idade) {

this.name = nome;

this.age = idade;

}

public void Print () {

System.out.println (nome + "---" + idade);

}

resumo público vazio eat ();

sono vazio público abstrato ();

}

// Classe abstrata (atleta)

classe abstrata Athlete estende Person1 {

Atleta público (nome da string, idade int) {

super (nome, idade);

}

público vazio eat () {

System.out.println ("Coma comida saudável.");

}

sono vazio público () {

System.out.println ("Deitar cedo e acordar cedo");

}

resumo público vazio learn ();

}

// Classe abstrata (coach)

classe abstrata Coach estende Person1 {

Coach público (nome da string, idade int) {

super (nome, idade);

}

público vazio eat () {

System.out.println ("Refeição razoável, mantenha seu corpo");

}

sono vazio público () {

System.out.println ("Lei do descanso");

}

ensino público vazio abstrato ();

}

// Classe específica (atleta)

classe PingPong estende Athlete implementa Learnenglish {

PingPong público (nome da string, int idade) {

super (nome, idade);

}

aprender vazio público () {

System.out.println ("Aprenda tênis de mesa");

}

aprender a falar em público () {

System.out.println ("Aprenda inglês!");

}

}

classe Basketball estende o atleta {

basquete público (nome da sequência, idade int) {

super (nome, idade);

}

aprender vazio público () {

System.out.println ("Learning Basketball");

}

}

// Classe específica (coach)

A classe PingCoach estende o Coach implementa o Learnenglish {

PingCoach público (nome da string, idade int) {

super (nome, idade);

}

ensinar vazio público () {

System.out.println ("Ensino de Ping Pong");

}

aprender a falar em público () {

System.out.println ("Aprenda inglês!");

}

}

classe BasketCoach estende o Coach {

public BasketCoach (nome da string, int idade) {

super (nome, idade);

}

ensinar vazio público () {

System.out.println ("Ensino de basquete");

}

}

// classe de teste

classe pública Myproject1 {

      public static void main (String [] args) {

      BasketCoach a = novo BasketCoach ("aaaa", 20);

      uma impressão();

      a.eat ();

      adormecido();

      em cada();

      }

}

Uma aula de teste para um treinador de basquete:

Resultado da operação:

Uma aula de teste para jogadores de tênis de mesa:

Resultado da operação:

Publicado 75 artigos originais · elogiado 164 · 110.000 visualizações

Acho que você gosta

Origin blog.csdn.net/qq_41679818/article/details/90545145
Recomendado
Clasificación