Herança em Java é um mecanismo que significa que um objeto obtém todas as propriedades e comportamentos do objeto pai.
Herança em Java é: você pode criar novas classes com base nas classes existentes. Ao herdar de uma classe existente, você pode reutilizar os métodos e campos da classe pai ou pode adicionar novos métodos e campos à nova classe herdada.
A herança representa o relacionamento IS-A , também conhecido como relacionamento pai-filho.
Por que usar herança em java?
Para cobertura do método (para que ele possa atingir o polimorfismo do tempo de execução), melhore a capacidade de reutilização do código. Em Java, as subclasses podem herdar os métodos da classe pai sem a necessidade de reescrever os mesmos métodos. Mas às vezes a subclasse não deseja herdar o método da classe pai intacto, mas deseja fazer certas modificações, o que requer a reescrita do método (sobrescrita).
Sintaxe herdada de Java
class Subclass-name extends Superclass-name
{
//methods and fields
}
Java
extends
A palavra-chave indica que uma nova classe está sendo criada derivando de uma classe existente. extends
O significado de " " é aumentar a função. Na terminologia Java, a classe herdada é chamada de pai ou superclasse, e a nova classe é chamada de filho ou subclasse.
Exemplo de herança Java
Conforme mostrado na figura acima, Programmer
é uma subcategoria e Employee
uma supercategoria. É uma relação entre duas classes Programmer IS-A Employee
. Representa Programmer
um Employee
tipo.
Consulte a implementação do código de amostra abaixo-
class Employee {
float salary = 40000;
}
class Programmer extends Employee {
int bonus = 10000;
public static void main(String args[]) {
Programmer p = new Programmer();
System.out.println("Programmer salary is:" + p.salary);
System.out.println("Bonus of Programmer is:" + p.bonus);
}
}
Java
Execute o código acima para obter o seguinte resultado -
Programmer salary is:40000.0
Bonus of programmer is:10000
Java
No exemplo acima, o Programmer
objeto pode acessar sua própria classe e Employee
os campos da classe, o que melhora a capacidade de reutilização do código.
tipo de herança java
Com base nas classes, pode haver três tipos de herança em java: simples, multinível e hierárquica. Na programação Java, a herança múltipla e mista só pode ser suportada por meio de interfaces. Aprenderemos sobre a aplicação da interface de aprendizado em capítulos posteriores.
Nota: As classes em java não suportam herança múltipla.
Quando uma classe estende várias classes, isso é chamado de herança múltipla. Por exemplo:
(1). Exemplo de herança única
TestInheritance.java
Código de arquivo da seguinte forma -
class Animal {
void eat() {
System.out.println("eating...");
}
}
class Dog extends Animal {
void bark() {
System.out.println("barking...");
}
}
class TestInheritance {
public static void main(String args[]) {
Dog d = new Dog();
d.bark();
d.eat();
}
}
Java
Execute o código acima para obter o seguinte resultado -
barking...
eating...
Java
(2). Exemplo de herança multinível
TestInheritance2.java
Código de arquivo da seguinte forma -
class Animal {
void eat() {
System.out.println("eating...");
}
}
class Dog extends Animal {
void bark() {
System.out.println("barking...");
}
}
class BabyDog extends Dog {
void weep() {
System.out.println("weeping...");
}
}
class TestInheritance2 {
public static void main(String args[]) {
BabyDog d = new BabyDog();
d.weep();
d.bark();
d.eat();
}
}
Java
Execute o código acima para obter o seguinte resultado -
weeping...
barking...
eating...
Java
(3). Exemplo de herança multinível
TestInheritance3.java
Código de arquivo da seguinte forma -
class Animal {
void eat() {
System.out.println("eating...");
}
}
class Dog extends Animal {
void bark() {
System.out.println("barking...");
}
}
class Cat extends Animal {
void meow() {
System.out.println("meowing...");
}
}
class TestInheritance3 {
public static void main(String args[]) {
Cat c = new Cat();
c.meow();
c.eat();
// c.bark();//C.T.Error
}
}
Java
Execute o código acima para obter o seguinte resultado -
meowing...
eating...
Java
Pergunta: Por que a herança múltipla não é compatível com Java?
Para reduzir a complexidade e simplificar a linguagem, a herança múltipla não é suportada em Java. Imagine um: A , B e C são três classes. C classe herda A e B classe. Se as classes A e B têm o mesmo método e o chamam de um objeto de subclasse, o método de chamada da classe A ou B será ambíguo.
Como os erros em tempo de compilação são melhores do que erros em tempo de execução, se você herdar 2
uma classe, o java relatará erros em tempo de compilação. Portanto, não importa se existe o mesmo método na subclasse, haverá um erro de tempo de compilação relatado. Por exemplo, o código a seguir foi compilado incorretamente.
class A {
void msg() {
System.out.println("Hello");
}
}
class B {
void msg() {
System.out.println("Welcome");
}
}
class C extends A,B
{
//suppose if it were
Public Static
void main(String args[]) {
C obj = new C();
obj.msg();// Now which msg() method would be invoked?
}
}
Java