Como a classe Ponto3D é filha de Ponto2D ela herda seus atributos e métodos, mas é necessaŕio colocar o super() para passar os parametros para a classe pai.
class Ponto2D {
private double x, y;
Ponto2D(double _x, double _y) {
x = _x;
y = _y;
}
}
class Ponto3D extends Ponto2D {
private double z;
Ponto3D(double _x, double _y, double _z) {
super(_x,_y);
z = _z;
}
}
Mesmo problema da questão 1
classe Funcionario
public class Funcionario {
private String nome;
private String matricula;
private double salarioBruto;
private double deducoes;
public Funcionario(String nome, String matricula, double salarioBruto, double deducoes) {
this.nome = nome;
this.matricula = matricula;
this.salarioBruto = salarioBruto;
this.deducoes = deducoes;
}
public double salarioLiquido(){
return salarioBruto - deducoes;
}
public double getSalarioBruto() {
return salarioBruto;
}
public double getDeducoes() {
return deducoes;
}
@Override
public String toString(){
return "Nome: " + this.nome +
"\nMat.: " + this.matricula +
"\nSalário bruto: R$" + this.salarioBruto +
"\nDeduções: R$" + this.deducoes +
"\nSalário líquido: R$" + this.salarioLiquido()+
"\n";
}
}
classe Gerente
public class Gerente extends Funcionario {
private int categoria;
private String departamento;
public Gerente(String nome, String matricula, double salarioBruto, double deducoes, int categoria, String departamento) {
super(nome, matricula, salarioBruto, deducoes);
this.categoria = categoria;
this.departamento = departamento;
}
@Override
public double salarioLiquido() {
double salarioBase = getSalarioBruto() - getDeducoes();
double porcentagem = 0.1;
switch(this.categoria){
case 1:
return salarioBase + (salarioBase * porcentagem);
case 2:
porcentagem = 0.2;
return salarioBase + (salarioBase * porcentagem);
default:
System.out.println("Esta categoria não existe");
return 0;
}
}
public String toString(){
return super.toString() +
"Departamento: " + this.departamento +
"\nCategoria: " + this.categoria;
}
}
classe Empresa (main)
public class Empresa {
public static void main(String[] args) {
Funcionario funcionario = new Funcionario("José", "12-341", 1200.0, 200.0);
Gerente gerente1 = new Gerente("Carlos", "12-451", 2500.0, 300.0, 1, "Vendas");
Gerente gerente2 = new Gerente("Marcos", "12-251", 3200.0, 400.0, 2, "Operações");
System.out.println("Funcionario - R$" + funcionario.salarioLiquido());
System.out.println("Gerente categoria 1 - R$" + gerente1.salarioLiquido());
System.out.println("Gerente categoria 2 - R$" + gerente2.salarioLiquido());
System.out.println("---------");
System.out.println(funcionario.toString()+"\n -------");
System.out.println(gerente1.toString()+"\n -------");
System.out.println(gerente2.toString());
}
}
Adicionando um atributo dataDeAdmissao na Classe funcionario, que pra fins de teste foi inicializada com a data de 2000-01-01, podemos usar o método tempoDeCasa() que retornará o a diferença entre a data atual e a data de admissão em anos. No exemplo abaixo o retorno seria 17 anos, levando em consideração que estamos em 2017.
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.time.LocalDate;
public class Funcionario {
private String nome;
private String matricula;
private double salarioBruto;
private double deducoes;
private LocalDate dataDeAdmissao;
public Funcionario(String nome, String matricula, double salarioBruto, double deducoes) {
this.dataDeAdmissao = LocalDate.of(2000, 1, 1);
this.nome = nome;
this.matricula = matricula;
this.salarioBruto = salarioBruto;
this.deducoes = deducoes;
}
public double salarioLiquido(){
return salarioBruto - deducoes;
}
public void setDataDeAdmissao(LocalDate data){
this.dataDeAdmissao = data;
}
public void tempoDecasa(){
System.out.println(nome +
" está empregado há " +
ChronoUnit.YEARS.between(dataDeAdmissao, LocalDate.now())
+" anos");
}
public double getSalarioBruto() {
return salarioBruto;
}
```