Classe Abstrata

Classe Abstrata

A classe abstrata é definida pelo modificador denominado abstract na assinatura da classe. Ela pode ter atributos, métodos com corpo , métodos sem corpo utilizando o modificador abstract, métodos herdados da classe Object e construtores.
Ela não pode ser instanciada , isto é, criar um objeto dela. Logo temos que herda em outras classes concretas (Subclasse). Os métodos sem corpo obrigatoriamente terá que ser rescrito na subclasse como ocorre na Interface, e na subclasse utiliza a palavra extends para herdar a classe abstrata.

Apresentação nas Classes em Java

package entity;

public abstract class Funcionario {

	private String nome;
	private Double salario;

	public Funcionario() {
	}	

	public Funcionario(String nome, Double salario) {
		super();
		this.nome = nome;
		this.salario = salario;
	}

	@Override
	public String toString() {
		return "Funcionario [nome=" + nome + ", salario=" + salario + "]";
	}

	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public Double getSalario() {
		return salario;
	}
	public void setSalario(Double salario) {
		this.salario = salario;
	
	

	public void calculoBonus(Double bonus){
		setSalario(getSalario() + bonus);
	}
	
	public abstract void calculoDesconto();
	
}
package entity;

public class FuncionarioCLT extends Funcionario {

	@Override
	public void calculoDesconto() {
		setSalario(getSalario() -  ( (getSalario() * 5 ) / 100 ) );
	}	
}    

Executando...

package main;

import entity.FuncionarioCLT;

public class Main {

	public static void main(String[] args) {
		
		FuncionarioCLT fc = new FuncionarioCLT();
		fc.setNome("Jose");
		fc.setSalario(5000.);
			
		System.out.println("Nome " + fc.getSalario());
			
		System.out.println("Salario Bruto : " + fc.getSalario());
			
		fc.calculoBonus(100.);
			
		System.out.println("Salário com Bonus : " + fc.getSalario());
			
		fc.calculoDesconto();
		
		System.out.println("Salário com Desconto : " + fc.getSalario());		
	}	
}