Em linguagens orientadas a objeto temos meios de definir o acesso e uso dos elementos. Segue uma lista de algumas dessas palavras e sua funcionalidade.

  • public: declara que uma propriedade/método possa ser acessado externamente, ou seja, é visível fora do objeto

  • private: oposto do public, toda propriedade/método só pode ser acessada internamente da classe

  • protected: semelhante ao private, ou seja, não é visível fora do objeto, mas é compartilhado entre seus derivados transmida hierarquicamente

  • static: um método/propriedade estática são elementos da classe em si, ou seja, não independem de sua implementação, são compartilhadas por todas e não podem ser alteradas. Em geral são constantes ou métodos que não dependem de parâmetros da classe

Algumas outras keywords frequentemente usadas:

  • virtual: um método virtual é um método que pode ser sobreposto (override); ou seja, um método non-override não poderá ser sobreposto. Uma forma de lidar com isso seria usar a keyword new method, escondendo o método base na derivada. Por default, no Java todos os métodos são virtuais e, portanto, podem ser sobrepostos. Obs: não aplicável a métodos abstratos e estáticos.

  • override: declara que um método esta sobrepondo um método base - aspecto do polimorfismo - "one interface, multiple methods" (uma interface, múltiplos métodos)

  • abstract: declara uma classe semi-implementada, ou seja, possui método que não puderam ser implementadas genericamente, e portanto, devem ser implementadas por seus derivados

  • interface: define uma assinatura para um tipo de dado (data type). É uma forma de dizer que todo tipo que implementa uma dada interface terá certos elementos, sempre! É muito semelhante a abstract, a diferença é que num algumas implementações já estão feitas. Outro detalhe relevante é que na herança uma classe pode apenas derivar de uma única classe base mas pode implementar quantas interfaces desejar. Todos os métodos de uma interface são públicos, um tanto óbvio

  • sealed: impede que uma classe seja herdada. Semelhante ao final no Java