Baixe o app para aproveitar ainda mais
Prévia do material em texto
Disciplina: Linguagem de Programação II Prof. MSc. Lucas Gonçalves Nadalete Declaração de Classes Criação da superclasse Criação da subclasse package esporte; public class Coletivo{ } import esporte.Coletivo; class Futebol extends Coletivo{ public static void main(String[] args) { } } Os métodos e as atributos (variáveis de instância não-locais) são conhecidos coletivamente como MEMBROS; Enquanto uma classe só pode usar 2 dos 4 níveis de controle de acesso (package- private/sem modificador e public), os membros podem usar: public protected Default/sem modificador (package-private) private Declaração de membros simples: String nome; void executar(){} Modificadores de acesso: public: acessado de qualquer classe; protected: acessado por classes filhas; private: acessado dentro da mesma classe; Sem Modificador (package-private -> Padrão): acessado dentro do mesmo pacote. O que significa o fato do código em uma classe ter acesso a um membro de outra classe? Se a classe A tiver acesso a um membro da classe B, significa que o membro da classe B está visível para a classe A Existem duas questões relativas a acesso que devem ser entendidas: O código de um método em uma classe pode acessar um membro de outra classe? Uma subclasse pode herdar um membro da sua superclasse? O código de um método em uma classe pode acessar um membro de outra classe? Este tipo de acesso ocorre quando um método de uma classe tenta acessar um membro de outra classe, através do operador ponto (.) Uma subclasse pode herdar um membro da sua superclasse? Este tipo de acesso refere-se a quais membros de uma SUPERCLASSE podem ser acessados por uma SUBCLASSE por meio de herança; Se uma SUBCLASSE herda um membro, é exatamente como se a SUBCLASSE tivesse declarado o membro nela mesma; Uma subclasse pode herdar um membro da sua superclasse? Quando um membro é declarado public, significa que todas as outras classes, independente do pacote ao qual pertençam, podem acessar o membro em questão Assumindo que a própria classe esteja visível Perceba que as classes Goo e Sludge estão em PACOTES diferentes Entretanto, Goo pode invocar o método em Sludge sem problemas. Porque?????? Tanto a classe (Sludge ) quanto o método (testIt) estão marcados como public Para uma subclasse, se um membro da sua superclasse for declarado como public, a subclasse herda esse membro Neste outro exemplo, a classe Roo declara o membro doRootThings() como public Se criarmos uma subclasse de Roo, qualquer código presente nessa subclasse Roo poderá chamar os membros herdados (doRootThings()) Obs.: o código poderia ter sido escrito como this.doRootThings() Além de poder invocar o método doRootThings() para si mesmo, exemplo anterior, o código de alguma outra classe poderia chamar doRootThings() para uma instância de Cloo Membros marcados como private não podem ser acessados por nenhuma outra classe, a não ser aquela na qual o membro private foi declarado; Obs.: Isso caracteriza o conceito OO chamado Encapsulamento; Fazendo uma pequena alteração na classe Roo: Erro de Compilação: “Método Invisível”, é como se o método doRootThings() não existisse E se uma subclasse tentasse herdar um membro private da sua superclasse? Sem modificador (package-private) Só pode ser acessado se a classe que o estiver acessando pertencer ao mesmo pacote; Pode ser acessado (através de herança) por uma subclasse, mesmo se a subclasse estiver em um pacote diferente; Depois que a subclasse de fora do pacote herda o membro protected, ele torna-se private para qualquer código de fora da subclasse, com exceção das subclasses da subclasse Muito do controle de acesso se concentra em se as duas classes envolvidas estão no mesmo pacote ou em pacotes diferentes; Se a uma classe não for visível a outra, então nenhum dos seus membros será visível, nem mesmo se estiverem declarados como public; Por outro lado, se a classe estiver visível, observe os níveis de acesso nos membros individuais; Visibilidade PUBLIC PROTECTED DEFAULT (package- private) PRIVATE A partir da mesma classe Sim Sim Sim Sim A partir de qualquer classe do mesmo pacote Sim Sim Sim Não A partir de uma subclasse do mesmo pacote Sim Sim Sim Não A partir de uma subclasse de fora do mesmo pacote Sim Sim, através da herança Não Não A partir de qualquer classe que não seja uma subclasse e esteja fora do pacote Sim Não Não Não Métodos: final: nenhuma outro método pode sobrescrever o método static: se torna um método da classe e não das instâncias abstract: não vai ser implementado na classe corrente, somente em um de seus filhos Outros que vamos ver mais tarde... Atributos: final: o valor do atributo não pode ser alterado ▪ private final String nome = ″João″; static: só vai ter uma instância/valor do atributo para todas as instâncias da classe. Se torna um atributo da classe e não das instâncias Outros que vamos ver mais tarde... Implementar os exemplos referente aos membros public e private apresentados em aula
Compartilhar