// 1. Extração dos dados do curso para uma classe própria
class Curso {
private double mensalidade;
public Curso
( String nome,
String nivel,
double mensalidade
) { this .nome = nome;
this .nivel = nivel;
this .mensalidade = mensalidade;
}
public String getNome
( ) { return nome
; } public String getNivel
( ) { return nivel
; } public double getMensalidade( ) { return mensalidade; }
}
// 2. Criação de uma superclasse abstrata para Aluno
abstract class Aluno {
protected int matricula;
protected Curso curso;
public Aluno
( String nome,
int matricula, Curso curso
) { this .nome = nome;
this .matricula = matricula;
this .curso = curso;
}
// Método abstrato para ser implementado pelas subclasses
public abstract String getDados
( ) ; }
// 3. Subclasse para alunos sem bolsa
class AlunoRegular extends Aluno {
public AlunoRegular
( String nome,
int matricula, Curso curso
) { super ( nome, matricula, curso) ;
}
@Override
String resp
= "Aluno: " + this .
nome + "\n " ; resp += "Curso: " + this .curso .getNivel ( ) + " em " + this .curso .getNome ( ) + "\n " ;
resp += "Mensalidade: R$ " + this .curso .getMensalidade ( ) ;
return resp;
}
}
// 4. Subclasse para alunos bolsistas
class AlunoBolsista extends Aluno {
private double desconto;
public AlunoBolsista
( String nome,
int matricula, Curso curso,
double desconto
) { super ( nome, matricula, curso) ;
this .desconto = desconto;
}
@Override
String resp
= "Aluno: " + this .
nome + "\n " ; resp += "Curso: " + this .curso .getNivel ( ) + " em " + this .curso .getNome ( ) + "\n " ;
resp += "Bolsista com desconto de: " + this .desconto + "%\n " ;
resp += "Mensalidade: R$ " + this .curso .getMensalidade ( ) * ( 1 - this .desconto / 100 ) ;
return resp;
}
}
// 5. Classe de Teste
class Teste {
public static void main
( String args
[ ] ) { Curso c1 = new Curso( "ADS" , "Graduação" , 920.50 ) ;
Curso c2 = new Curso( "Computação Aplicada" , "Mestrado" , 2150.45 ) ;
Aluno a1 = new AlunoBolsista( "Martin Fowler" , 11223344 , c1, 20.5 ) ;
Aluno a2 = new AlunoRegular( "Kent Beck" , 22334455 , c2) ;
System .
out .
println ( a1.
getDados ( ) ) ; System .
out .
println ( a2.
getDados ( ) ) ; }
}
Ly8gMS4gRXh0cmHDp8OjbyBkb3MgZGFkb3MgZG8gY3Vyc28gcGFyYSB1bWEgY2xhc3NlIHByw7NwcmlhCmNsYXNzIEN1cnNvIHsKICAgIHByaXZhdGUgU3RyaW5nIG5vbWU7CiAgICBwcml2YXRlIFN0cmluZyBuaXZlbDsKICAgIHByaXZhdGUgZG91YmxlIG1lbnNhbGlkYWRlOwoKICAgIHB1YmxpYyBDdXJzbyhTdHJpbmcgbm9tZSwgU3RyaW5nIG5pdmVsLCBkb3VibGUgbWVuc2FsaWRhZGUpIHsKICAgICAgICB0aGlzLm5vbWUgPSBub21lOwogICAgICAgIHRoaXMubml2ZWwgPSBuaXZlbDsKICAgICAgICB0aGlzLm1lbnNhbGlkYWRlID0gbWVuc2FsaWRhZGU7CiAgICB9CgogICAgcHVibGljIFN0cmluZyBnZXROb21lKCkgeyByZXR1cm4gbm9tZTsgfQogICAgcHVibGljIFN0cmluZyBnZXROaXZlbCgpIHsgcmV0dXJuIG5pdmVsOyB9CiAgICBwdWJsaWMgZG91YmxlIGdldE1lbnNhbGlkYWRlKCkgeyByZXR1cm4gbWVuc2FsaWRhZGU7IH0KfQoKLy8gMi4gQ3JpYcOnw6NvIGRlIHVtYSBzdXBlcmNsYXNzZSBhYnN0cmF0YSBwYXJhIEFsdW5vCmFic3RyYWN0IGNsYXNzIEFsdW5vIHsKICAgIHByb3RlY3RlZCBTdHJpbmcgbm9tZTsKICAgIHByb3RlY3RlZCBpbnQgbWF0cmljdWxhOwogICAgcHJvdGVjdGVkIEN1cnNvIGN1cnNvOwoKICAgIHB1YmxpYyBBbHVubyhTdHJpbmcgbm9tZSwgaW50IG1hdHJpY3VsYSwgQ3Vyc28gY3Vyc28pIHsKICAgICAgICB0aGlzLm5vbWUgPSBub21lOwogICAgICAgIHRoaXMubWF0cmljdWxhID0gbWF0cmljdWxhOwogICAgICAgIHRoaXMuY3Vyc28gPSBjdXJzbzsKICAgIH0KCiAgICAvLyBNw6l0b2RvIGFic3RyYXRvIHBhcmEgc2VyIGltcGxlbWVudGFkbyBwZWxhcyBzdWJjbGFzc2VzCiAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldERhZG9zKCk7Cn0KCi8vIDMuIFN1YmNsYXNzZSBwYXJhIGFsdW5vcyBzZW0gYm9sc2EKY2xhc3MgQWx1bm9SZWd1bGFyIGV4dGVuZHMgQWx1bm8gewogICAgCiAgICBwdWJsaWMgQWx1bm9SZWd1bGFyKFN0cmluZyBub21lLCBpbnQgbWF0cmljdWxhLCBDdXJzbyBjdXJzbykgewogICAgICAgIHN1cGVyKG5vbWUsIG1hdHJpY3VsYSwgY3Vyc28pOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIFN0cmluZyBnZXREYWRvcygpIHsKICAgICAgICBTdHJpbmcgcmVzcCA9ICJBbHVubzogIiArIHRoaXMubm9tZSArICJcbiI7CiAgICAgICAgcmVzcCArPSAiQ3Vyc286ICIgKyB0aGlzLmN1cnNvLmdldE5pdmVsKCkgKyAiIGVtICIgKyB0aGlzLmN1cnNvLmdldE5vbWUoKSArICJcbiI7CiAgICAgICAgcmVzcCArPSAiTWVuc2FsaWRhZGU6IFIkICIgKyB0aGlzLmN1cnNvLmdldE1lbnNhbGlkYWRlKCk7CiAgICAgICAgcmV0dXJuIHJlc3A7CiAgICB9Cn0KCi8vIDQuIFN1YmNsYXNzZSBwYXJhIGFsdW5vcyBib2xzaXN0YXMKY2xhc3MgQWx1bm9Cb2xzaXN0YSBleHRlbmRzIEFsdW5vIHsKICAgIHByaXZhdGUgZG91YmxlIGRlc2NvbnRvOwoKICAgIHB1YmxpYyBBbHVub0JvbHNpc3RhKFN0cmluZyBub21lLCBpbnQgbWF0cmljdWxhLCBDdXJzbyBjdXJzbywgZG91YmxlIGRlc2NvbnRvKSB7CiAgICAgICAgc3VwZXIobm9tZSwgbWF0cmljdWxhLCBjdXJzbyk7CiAgICAgICAgdGhpcy5kZXNjb250byA9IGRlc2NvbnRvOwogICAgfQoKICAgIEBPdmVycmlkZQogICAgcHVibGljIFN0cmluZyBnZXREYWRvcygpIHsKICAgICAgICBTdHJpbmcgcmVzcCA9ICJBbHVubzogIiArIHRoaXMubm9tZSArICJcbiI7CiAgICAgICAgcmVzcCArPSAiQ3Vyc286ICIgKyB0aGlzLmN1cnNvLmdldE5pdmVsKCkgKyAiIGVtICIgKyB0aGlzLmN1cnNvLmdldE5vbWUoKSArICJcbiI7CiAgICAgICAgcmVzcCArPSAiQm9sc2lzdGEgY29tIGRlc2NvbnRvIGRlOiAiICsgdGhpcy5kZXNjb250byArICIlXG4iOwogICAgICAgIHJlc3AgKz0gIk1lbnNhbGlkYWRlOiBSJCAiICsgdGhpcy5jdXJzby5nZXRNZW5zYWxpZGFkZSgpICogKDEgLSB0aGlzLmRlc2NvbnRvIC8gMTAwKTsKICAgICAgICByZXR1cm4gcmVzcDsKICAgIH0KfQoKLy8gNS4gQ2xhc3NlIGRlIFRlc3RlCmNsYXNzIFRlc3RlIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmcgYXJnc1tdKSB7CiAgICAgICAgQ3Vyc28gYzEgPSBuZXcgQ3Vyc28oIkFEUyIsICJHcmFkdWHDp8OjbyIsIDkyMC41MCk7CiAgICAgICAgQ3Vyc28gYzIgPSBuZXcgQ3Vyc28oIkNvbXB1dGHDp8OjbyBBcGxpY2FkYSIsICJNZXN0cmFkbyIsIDIxNTAuNDUpOwoKICAgICAgICBBbHVubyBhMSA9IG5ldyBBbHVub0JvbHNpc3RhKCJNYXJ0aW4gRm93bGVyIiwgMTEyMjMzNDQsIGMxLCAyMC41KTsKICAgICAgICBBbHVubyBhMiA9IG5ldyBBbHVub1JlZ3VsYXIoIktlbnQgQmVjayIsIDIyMzM0NDU1LCBjMik7CiAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGExLmdldERhZG9zKCkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhMi5nZXREYWRvcygpKTsKICAgIH0KfQ==