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: