Vídeo: Curso POO Java #10b - Herança (Parte 1) 2024
Quando você escreve um programa orientado a objetos em Java, você começa pensando nos dados. Você está escrevendo sobre contas. Então, o que é uma conta? Você está escrevendo código para lidar com cliques de botão. Então, o que é um botão? Você está escrevendo um programa para enviar cheques de folha de pagamento aos funcionários. O que é um funcionário?
Neste exemplo, um funcionário é alguém com um nome e um título de trabalho. Claro, os funcionários têm outras características, mas, por enquanto, seguem o básico. O código nesta lista define o que significa ser um empregado.
importar java estável. lang. Sistema. Fora; Classe pública Employee {private String name; Private String jobTitle; public void setName (String nameIn) {name = nameIn;} public String getName () {return name;} public void setJobTitle (String jobTitleIn) {jobTitle = jobTitleIn;} public String getJobTitle () {return jobTitle;} public void cutCheck (double amountPaid) {out. printf ("Pague na ordem de% s", nome); Fora. printf ("(% s) *** $", jobTitle); Fora. printf ("%,. 2fn", amountPaid);}}
Na listagem, uma classe Employee é definida. Você pode usar o que você define aqui e ampliar a definição para criar novas classes mais especializadas. Então, nesta próxima lista, você define uma nova classe - uma classe FullTimeEmployee.
classe pública FullTimeEmployee estende Employee {private double weeklySalary; Dupla benefício privadoDeducção; public void setWeeklySalary (double weeklySalaryIn) {weeklySalary = weeklySalaryIn;} public double getWeeklySalary () {return weeklySalary;} public void setBenefitDeduction (double benefitDedIn) {benefitDeduction = benefitDedIn;} public double getBenefitDeduction () {return benefitDeduction;} public double findPaymentAmount () {return weeklySalary - benefitDeduction;}}
Olhando para a listagem, você pode ver que cada instância da classe FullTimeEmployee tem dois campos: weeklySalary e benefitDeduction. Mas esses são os únicos campos que cada instância do FullTimeEmployee tem? Não, eles não são.
A primeira linha diz que a classe FullTimeEmployee amplia a classe Employee existente. Isso significa que, além de ter um WeekSalary semanal e um benefícioDeduction, cada instância FullTimeEmployee também possui dois outros campos: name e jobTitle. Estes dois campos vêm da definição da classe Empregado, que você pode encontrar na primeira listagem.
Na segunda lista, a palavra mágica se estende . Quando uma classe expande uma classe existente, a classe de extensão herdará automaticamente a funcionalidade que está definida na classe existente.Portanto, a classe FullTimeEmployee herda os campos name e jobTitle.
A classe FullTimeEmployee também herda todos os métodos que são declarados na classe Employee - setName, getName, setJobTitle, getJobTitle e cutCheck. A classe FullTimeEmployee é uma subclasse da classe Employee.
Isso significa que a classe Employee é a É quase (mas não bastante) como se a classe FullTimeEmployee fosse definida pelo código nesta listagem. Este código é falso, mas informativo. Por que esta lista de código falso? Bem, a principal diferença entre esta listagem e a situação de herança nas listagens anteriores é esta: Uma classe filho não pode fazer referência direta aos campos privados de sua classe pai. Para fazer qualquer coisa com os campos privados da classe pai, a classe filho deve chamar os métodos de acesso da classe pai. De volta à segunda lista, chamar setName ("Rufus") seria legal, mas o nome do código = "Rufus" não seria. Se você acredita em tudo o que você lê na última listagem, você pensaria que esse código na classe FullTimeEmployee pode fazer o nome = "Rufus". Bem, não pode. Você não precisa do Empregado. arquivo java em seu disco rígido para escrever o código que estende a classe Employee. Tudo o que você precisa é o arquivo Employee. classe.
importar java estável. lang. Sistema. Fora; classe pública FullTimeEmployee {private String name; Private String jobTitle; Private WeekSalary privado; Dupla benefício privadoDeducção; public void setName (String nameIn) {name = nameIn;} public String getName () {return name;} public void setJobTitle (String jobTitleIn) {jobTitle = jobTitleIn;} public String getJobTitle () {return jobTitle;} public void setWeeklySalary (double weeklySalaryIn) {weeklySalary = weeklySalaryIn;} public double getWeeklySalary () {return weeklySalary;} public void setBenefitDeduction (double benefitDedIn) {benefitDeduction = benefitDedIn;} public double getBenefitDeduction () {return benefitDeduction;} public double findPaymentAmount () {return weeklySalary - benefitDeduction;} public void cutCheck (double amountPaid) {out. printf ("Pague na ordem de% s", nome); Fora. printf ("(% s) *** $", jobTitle); Fora. printf ("%,. 2fn", amountPaid);}}