Programação Java: criação de uma subclasse

Quando você escreve um programa orientado a objetos em Java, você começar a pensar sobre os dados. Você está escrevendo sobre contas. Então, o que é uma conta? Você está escrevendo código para lidar com cliques de botão. Assim que é um botão? Você está escrevendo um programa para enviar cheques aos empregados. O que é um empregado?

Neste exemplo, um empregado é alguém com um nome e um cargo. Claro, os empregados têm outras características, mas por agora manter o básico. O código nesta lista define o que significa ser um empregado.

importação de classe estática java.lang.System.out-público Employee {private String name-private void setName Cadeia jobTitle-pública (String nameIn) {name = nameIn-} Cadeia getName pública () {return nome-} setJobTitle public void (String jobTitleIn) {jobTitle = jobTitleIn-} public string getJobTitle () {return jobTitle-} public void cutCheck (double ValorPago) {out.printf ( "pagar a ordem de% s", nome) -out.printf ( "(% s) *** $ ", jobTitle) -out.printf ("% ,. 2f n ", ValorPago) -}}

No perfil, uma Empregado classe é definida. Você pode usar o que você definir aqui e estender a definição para criar novas classes, mais especializadas. Portanto, nesta próxima listagem, você define uma nova classe - um Empregado em tempo integral classe.

FullTimeEmployee classe pública estende Employee {Private double double setWeeklySalary vazio benefitDeduction-pública weeklySalary-privadas (double weeklySalaryIn) {weeklySalary = weeklySalaryIn-} public double getWeeklySalary () {return weeklySalary-} setBenefitDeduction public void (double benefitDedIn) {benefitDeduction = benefitDedIn-} getBenefitDeduction public double () {return benefitDeduction-} findPaymentAmount dupla pública () {return weeklySalary - benefitDeduction-}}

Olhando para o perfil, você pode ver que cada instância do Empregado em tempo integral classe tem dois campos: weeklySalary e benefitDeduction. Mas são essas as únicas áreas que cada Empregado em tempo integral instância tem? Não, eles não são.

A primeira linha diz que o Empregado em tempo integral classe estende a existente Empregado classe. Isto significa que, além de ter um weeklySalary e um benefitDeduction, cada Empregado em tempo integral instância também tem dois outros campos: nome e Titulo do trabalho. Estes dois campos são provenientes de definição do Empregado classe, que pode encontrar na primeira listagem.

No segundo perfil, a palavra mágica é estende-se. Quando uma classe estende uma classe existente, a classe que se estende automaticamente herda a funcionalidade que está definido na classe existente. Então o Empregado em tempo integral classe inherits a nome e Titulo do trabalho Campos.

o Empregado em tempo integral classe também herda todos os métodos que são declarados na Empregado classe - nome do conjunto, getName, setJobTitle, getJobTitle, e cutCheck. o Empregado em tempo integral classe é um subclasse do Empregado classe.

Isso significa que o Empregado classe é a superclasse do Empregado em tempo integral classe. Você também pode falar em termos de parentes de sangue. o Empregado em tempo integral classe é a criança do Empregado classe, eo Empregado classe é a parente do Empregado em tempo integral classe.

É quase (mas não completamente) como se o Empregado em tempo integral classe foi definida pelo código nesta lista. Este código é falso, mas informativo.

importação de classe estática java.lang.System.out-pública FullTimeEmployee {private String name-privada Cadeia jobTitle-privada double double setName vazio benefitDeduction-pública weeklySalary-privadas (String nameIn) {name = nameIn-} getName public String () {return nome-} public void setJobTitle (string jobTitleIn) {jobTitle = jobTitleIn-} public string getJobTitle () {return jobTitle-} setWeeklySalary public void (weeklySalaryIn duplo) {weeklySalary = weeklySalaryIn-} public double getWeeklySalary () {return weeklySalary-} public vazio setBenefitDeduction (benefitDedIn duplo) {benefitDeduction = benefitDedIn-} getBenefitDeduction dupla pública () {return benefitDeduction-} findPaymentAmount dupla pública () {return weeklySalary - benefitDeduction-} public void cutCheck (double ValorPago) {out.printf ( "pagar ao ordem de "-out.printf, jobTitle) ("% s ", nome) -out.printf (" (% s) *** $% ,. 2f n ", ValorPago) -}}

Porque é que esta listagem de código falso? Bem, a principal diferença entre esta empresa ea situação herança nas listagens anteriores é esta: Uma classe criança não pode fazer referência direta aos campos privados de sua classe pai. Para fazer qualquer coisa com campos particulares da classe pai, a classe criança tem que chamar métodos de acesso da classe pai.

Voltar no segundo perfil, chamando setName (# 147-Rufus # 148-) seria legal, mas o código name = # 148-Rufus # 148- não seria. Se você acredita em tudo que lê no último perfil, você acha que o código na Empregado em tempo integral classe pode fazer name = # 148-Rufus # 148-. Bem, ele não pode.

Você não precisa do Employee.java arquivo em seu disco rígido para escrever código que estende o Empregado classe. Tudo que você precisa é o arquivo Employee.class.

menu