Latest web development tutorials

classes abstratas Java

No conceito orientado a objetos, todos os objetos são descritos por tipo, mas por outro lado, nem todas as classes são usadas para descrever o objeto, o objeto se uma classe não contém informação suficiente para descrever um específico tal classe é uma classe abstrata.

Além da classe abstrata não pode ser instanciado objetos, ainda existem outras classes funcionais, a maneira de acessar o membro variáveis, métodos e construtores dos membros e da mesma categoria geral.

Uma vez que a classe abstracta não pode ser instanciada objecto, de modo a classe resumo deve ser herdada, ele pode ser usado. Também por esta razão, geralmente determinada na fase de concepção ou não para projetar uma classe abstrata.

classe pai contém um conjunto de subclasse comum, mas, devido à classe pai em si é abstrato, você não pode usar esses métodos.


classe abstrata

Utilize para definir classe abstrata classe abstrata na linguagem Java. Os exemplos que se seguem:

/* 文件名 : Employee.java */
public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   public Employee(String name, String address, int number)
   {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.number = number;
   }
   public double computePay()
   {
     System.out.println("Inside Employee computePay");
     return 0.0;
   }
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + this.name
       + " " + this.address);
   }
   public String toString()
   {
      return name + " " + address + " " + number;
   }
   public String getName()
   {
      return name;
   }
   public String getAddress()
   {
      return address;
   }
   public void setAddress(String newAddress)
   {
      address = newAddress;
   }
   public int getNumber()
   {
     return number;
   }
}

Notando que a classe Employee não é diferente, embora a classe é uma classe abstrata, mas ainda tem três variáveis ​​de membro, métodos e sete membros de um construtor. Agora, se você tente o seguinte exemplo:

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      /* 以下是不允许的,会引发错误 */
      Employee e = new Employee("George W.", "Houston, TX", 43);

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

Quando você tenta compilar classe AbstractDemo, que irá produzir o seguinte erro:

Employee.java:46: Employee is abstract; cannot be instantiated
      Employee e = new Employee("George W.", "Houston, TX", 43);
                   ^
1 error

herança de classe abstrata

Nossa abordagem geral herdada pela classe Funcionário:

/* 文件名 : Salary.java */
public class Salary extends Employee
{
   private double salary; //Annual salary
   public Salary(String name, String address, int number, double
      salary)
   {
       super(name, address, number);
       setSalary(salary);
   }
   public void mailCheck()
   {
       System.out.println("Within mailCheck of Salary class ");
       System.out.println("Mailing check to " + getName()
       + " with salary " + salary);
   }
   public double getSalary()
   {
       return salary;
   }
   public void setSalary(double newSalary)
   {
       if(newSalary >= 0.0)
       {
          salary = newSalary;
       }
   }
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}

Embora não possamos instanciar um objeto da classe Employee, mas se instanciar um objeto da classe Salário que herda as variáveis ​​de classe de trabalhadores e três membros dos sete membros do método.

/* 文件名 : AbstractDemo.java */
public class AbstractDemo
{
   public static void main(String [] args)
   {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
      Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);

      System.out.println("Call mailCheck using Salary reference --");
      s.mailCheck();

      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
    }
}

O programa acima é compilado resultados são os seguintes:

Constructing an Employee
Constructing an Employee
Call mailCheck using  Salary reference --
Within mailCheck of Salary class
Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference--
Within mailCheck of Salary class
Mailing check to John Adams with salary 2400.

método abstrato

Se você deseja criar uma classe que contém um método membro específico, a implementação específica do método é determinada por suas subclasses, então você pode declarar o método na classe pai é um método abstrato.

Da mesma forma chave abstrato pode ser usado para declarar métodos abstratos, métodos abstratos conter apenas um nome de método, e nenhum corpo de método.

método abstrato não está definido, diretamente atrás do nome do método com um ponto e vírgula em vez de chaves.

public abstract class Employee
{
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   
   //其余代码
}

Declarar métodos abstratos resultarão em dois resultados seguintes:

  • Se uma classe contém métodos abstratos, a classe deve ser abstrato.
  • Qualquer subclasse deve substituir os métodos abstratos da classe pai, ou declarar-se abstrato.

Herdadas métodos subclasses abstratas deve substituir esse método. Caso contrário, a subclasse deve ser declarado como uma classe abstrata. Em última análise, deve haver subclasses para implementar o método abstrato, caso contrário, a partir do inicial para a subclasse última classe pai não pode ser usado para instanciar o objeto.

Se a classe Salário herda a classe de funcionários, deve implementar o método computePay ():

/* 文件名 : Salary.java */
public class Salary extends Employee
{
   private double salary; // Annual salary
  
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }

   //其余代码
}