Compreensão pessoal e aplicação de classes abstratas e interfaces Java

Diferenças:
(1) As classes abstratas precisam ser herdadas e apenas herança única; as interfaces precisam ser implementadas e várias implementações são possíveis.
(2) Métodos abstratos podem ser definidos em classes abstratas, e métodos não abstratos também podem ser definidos. As subclasses podem usar métodos não abstratos diretamente nelas depois de herdar classes abstratas; as interfaces só podem definir métodos abstratos, que devem ser implementados por subclasses .
(3) A herança de classes abstratas é definir o conteúdo comum básico do sistema; a realização de interfaces é definir as funções adicionais do sistema.

1. Aula abstrata

Métodos abstratos devem ser usadosresumoModificação de palavra-chave. Se uma classe contém métodos abstratos, ela é chamada de classe abstrata, e a classe abstrata deve ser modificada com a palavra-chave abstract antes da classe. Como não há método de realização concreto na classe abstrata, você não pode usar a classe abstrata para criar um objeto.

Os seguintes pontos devem ser observados sobre as classes abstratas:
• Os métodos abstratos não podem ser incluídos em classes não abstratas. Se a subclasse da classe pai abstrata não pode implementar todos os métodos abstratos, a subclasse também deve ser definida como abstrata. em outras palavras,Na subclasse não abstrata que a classe abstrata estende, todos os métodos abstratos devem ser implementados.Observe também que os métodos abstratos não são estáticos.
• Classes abstratas não podem ser inicializadas usando o novo operador. Porém, ainda é possível definir seu método de construção, que é chamado no método de construção de suas subclasses. Por exemplo, o método de construção da classe CeometricObject é chamado na classe Circle e na classe Recfange.
A classe que contém métodos abstratos deve ser abstrata. No entanto, você pode definir uma classe abstrata que não contém métodos abstratos . Nesse caso, você não pode usar o novo operador para criar uma instância dessa classe. Esta classe é usada para definir a classe base da nova subclasse.
• As subcategorias podemReescreverO método da classe pai e defini-lo como abstrato. Isso é raro, mas é útil quando a implementação do método da classe pai se torna inválida na classe filha. Nesse caso, a subclasse deve ser definida como abstrata;
• Mesmo se a classe pai da subclasse for concreta, a subclasse pode ser abstrata. Por exemplo, a classe Object é concreta, mas suas subclasses, como GeometricObject, podem ser abstratas.
• Você não pode usar o operador new para criar uma instância de uma classe abstrata, mas a classe abstrata pode ser usada como um
tipo de dados . Portanto, a seguinte declaração é correta para criar uma matriz cujos elementos são do tipo GeometricObject:
GeometricObject [] objects = new GeometricObject [10];
Em seguida, você pode criar uma instância de GeometricObject e atribuir seu valor de referência à matriz, conforme mostrado abaixo:
objetos [0] = novo Círculo ();

[Nota 1] Quais palavras-chave não podem coexistir com palavras-chave abstratas?
private no (as subclasses não podem ser substituídas)
static no (a chamada do nome da classe não tem conteúdo)
final no (o método final não pode ser reescrito)

**Compreensão pessoal: ** Uma classe abstrata é equivalente a uma classe formal, um template de uma classe, e os métodos abstratos dentro são alguns métodos formais, que precisam ser instanciados quando usados. capaz de passarParâmetros formais e reaisPara se assemelhar à memória, mas existem diferenças.

public class Demo {
    
    

	public static void main(String[] args) {
    
    
	
	//非抽象类的子类来创建实例对象	
	door D=new door();
	D.open();
	D.close();
		
	//不可以直接用new创建实例,下列写法是错误的
	BigDoor d=new BigDoor();
	
	
	//抽象类作为数据类型定义数组
	BigDoor[] d=new BigDoor[10];
	d[0]=new door();
	d[0].open();
	d[0].close();

	}

}
abstract class BigDoor{
    
    
	public abstract void open();
	public abstract void close();
}
class door extends BigDoor{
    
    
	public void open() {
    
    
		System.out.println("open");
	}
	public void close() {
    
    
		System.out.println("close");
	}
}

2. Interface

Quando todos os métodos em uma classe abstrata são métodos abstratos, podemos definir e expressar a classe abstrata em outra forma, que é a interface.

A interface pode conter variáveis ​​e métodos. Mas note que as variáveis ​​na interface serão designadas implicitamente como variáveis ​​finais públicas estáticas (e apenas variáveis ​​finais estáticas públicas, modificadas com private reportarão erros de compilação), e o método será implicitamente designado como métodos abstratos públicos E só pode ser um método abstrato público (modificações com outras palavras-chave, como privado, protegido, estático, final, etc. reportarão erros de compilação) e todos os métodos na interfaceNão pode ter uma realização concreta, Ou seja, os métodos na interfaceTodos eles devem ser métodos abstratos.

A partir daqui, você pode ver vagamente a diferença entre uma interface e uma classe abstrata.Uma interface é um tipo extremamente abstrato, que é mais "abstrato" do que uma classe abstrata e, em geral, nenhuma variável é definida na interface.
Pontos a serem observados:
1.
(1) Há um relacionamento de herança entre classes e um relacionamento de implementação entre classes e interfaces.
(2) A interface não pode ser instanciada. Somente após a subclasse que implementa a interface e reescreve todos os métodos abstratos na interface, a subclasse pode ser instanciada. Caso contrário, esta subclasse é uma classe abstrata.
2. Como usar a interface? ---- Realização, use a palavra-chave implements
(1) As classes Java não suportam herança múltipla, mas uma classe pode implementar várias interfaces.
(2) Uma classe pode implementar várias interfaces enquanto herda outra classe.
Descrição: quando a
subclasse implementa o método da interface, o métodoModificado para público, Porque quando a interface é definida, o método é público por padrão, mesmo que não seja explicitamente escrito.

**Compreensão pessoal:** Uma interface é um método específico. Se você precisar implementar um método obrigatório, poderá implementá-lo por meio da interface. Pode ser alcançado através da interfaceHerança múltipla

abstract class Big{
    
    
	public abstract void open();
	public abstract void close();
}

interface action{
    
    
	public void opendoor();
	public void closedoor();
}


class door extends Big{
    
    
	public void open() {
    
    
		System.out.println("open");
	}
	public void close() {
    
    
		System.out.println("close");
	}
}


class good implements action{
    
    
	public void opendoor() {
    
    
		System.out.println("Open doors");
	}
	public void closedoor() {
    
    
		System.out.println("Close doors");
	}
}


class D extends door implements action{
    
    
	public void closedoor() {
    
    
		System.out.println("close door");
	}
	public void opendoor() {
    
    
		System.out.println("open door");
	}
}
public class Demo {
    
    

	public static void main(String[] args) {
    
    
		door d=new door();
		d.close();
		
		//实现接口
		good g=new good();
		g.closedoor();
		g.opendoor();
		
		//抽象类+接口
		D ans=new D();
		ans.close();
		ans.open();
		ans.closedoor();
		ans.opendoor();
	}
	
}

Acho que você gosta

Origin blog.csdn.net/qq_40924271/article/details/110437026
Recomendado
Clasificación