Slides Lição 6, Betel, Ordenança para uma vida de obediência e submissão.pptx
(ACH2001) Introdução à Programação - Aula 20
1. Aula 20 – Especificadores de acesso e
Pacotes
Norton Trevisan Roman
12 de maio de 2020
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 1 / 32
2. Private
class Casa {
private double valorM2 = 1500;
Casa() {}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
O que acontece quando
compilamos CasaQuad?
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
super(valorM2);
}
CasaQuad(double lateral,double valorM2)
{
super(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
3. Private
class Casa {
private double valorM2 = 1500;
Casa() {}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
O que acontece quando
compilamos CasaQuad?
Linha de Comando
$ javac CasaQuad.java
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
super(valorM2);
}
CasaQuad(double lateral,double valorM2)
{
super(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
4. Private
class Casa {
private double valorM2 = 1500;
Casa() {}
Casa(double valorM2) {
this.valorM2 = valorM2;
}
...
}
O que acontece quando
compilamos CasaQuad?
Linha de Comando
$ javac CasaQuad.java
Compila. Nada impede.
class CasaQuad extends Casa {
double lateral = 10;
CasaQuad() {}
CasaQuad(double valorM2) {
super(valorM2);
}
CasaQuad(double lateral,double valorM2)
{
super(valorM2);
this.lateral = lateral;
}
double area() {
return(this.lateral>=0 ?
this.lateral*this.lateral : -1);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 2 / 32
5. Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
E quando compilamos
CasaRet?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 3 / 32
6. Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
E quando compilamos
CasaRet?
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: valorM2 has
private access in Casa
this.valorM2 = valorM2;
^
1 error
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 3 / 32
7. Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
N˜ao temos acesso ao
valor do m2
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 4 / 32
8. Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
N˜ao temos acesso ao
valor do m2
Muito embora ele
esteja na mem´oria do
objeto!
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 4 / 32
9. Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral, cquarto);
this.valorM2 = valorM2;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
Que fazer?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 5 / 32
10. Private
class CasaRet extends Casa {
double cquarto = 10;
double lateral = 10;
CasaRet() {}
CasaRet(double valorM2) {
super(valorM2);
}
CasaRet(double lateral, double cquarto)
{
this.lateral = lateral;
this.cquarto = cquarto;
}
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this.lateral = lateral;
this.cquarto = cquarto;
}
double area() {
double areat=-1;
if (this.lateral>=0 &&
this.cquarto>=0) {
areat = this.lateral*this.lateral;
areat += this.cquarto*this.lateral;
}
return(areat);
}
}
Que fazer?
Refatorar a classe
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 5 / 32
11. Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
12. Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
13. Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
14. Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral,cquarto);
super(valorM2);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
15. Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral,cquarto);
super(valorM2);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to super must be first
statement in constructor
super(valorM2);
^
1 error
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
16. Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral,cquarto);
super(valorM2);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to super must be first
statement in constructor
super(valorM2);
^
1 error
Como, se ambas devem ser o primeiro comando?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
17. Heran¸ca
E n˜ao poder´ıamos ter this e super juntas?
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
super(valorM2);
this(lateral,cquarto);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to this must be first
statement in constructor
this(lateral,cquarto);
^
1 error
class CasaRet extends Casa {
...
CasaRet(double lateral, double cquarto,
double valorM2) {
this(lateral,cquarto);
super(valorM2);
}
}
Linha de Comando
$ javac CasaRet.java
CasaRet.java:35: call to super must be first
statement in constructor
super(valorM2);
^
1 error
Como, se ambas devem ser o primeiro comando?
Teremos que optar
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 6 / 32
18. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
19. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
20. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
21. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
22. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
23. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Protected:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
24. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Protected:
protected construtor, atributo ou m´etodo: Somente elementos
pertencentes a classes do mesmo pacote, ou subclasse (independente
do pacote) tˆem acesso
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
25. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Protected:
protected construtor, atributo ou m´etodo: Somente elementos
pertencentes a classes do mesmo pacote, ou subclasse (independente
do pacote) tˆem acesso
Nada (“friendly”)
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
26. Especificadores (Modificadores) de Acesso
Determinam quem ter´a permiss˜ao para acessar ou
modificar os componentes (atributos e m´etodos)
das classes.
Private:
private construtor, atributo ou m´etodo: Somente elementos de
dentro da classe tˆem acesso
Public:
public classe, construtor, atributo ou m´etodo: Acesso irrestrito
Protected:
protected construtor, atributo ou m´etodo: Somente elementos
pertencentes a classes do mesmo pacote, ou subclasse (independente
do pacote) tˆem acesso
Nada (“friendly”)
classe, construtor, atributo ou m´etodo: Somente elementos
pertencentes a classes do mesmo pacote tˆem acesso
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 7 / 32
28. Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
29. Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
30. Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Podem ser declarados explicitamente, com a palavra
package
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
31. Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Podem ser declarados explicitamente, com a palavra
package
´Util quando temos duas classes com o mesmo nome, mas
fun¸c˜oes diferentes.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
32. Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Podem ser declarados explicitamente, com a palavra
package
´Util quando temos duas classes com o mesmo nome, mas
fun¸c˜oes diferentes.
Ex: normal.Matematica e complexo.Matematica, que tratariam
de fun¸c˜oes matem´aticas para n´umeros complexos e os demais
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
33. Pacotes
Pacote?
Corresponde ao modo como organizamos os arquivos .java
em diferentes diret´orios
´E o diret´orio
Podem ser declarados explicitamente, com a palavra
package
´Util quando temos duas classes com o mesmo nome, mas
fun¸c˜oes diferentes.
Ex: normal.Matematica e complexo.Matematica, que tratariam
de fun¸c˜oes matem´aticas para n´umeros complexos e os demais
Nesse caso, a primeira seria normal/Matematica.class e a
segunda em complexo/Matematica.class
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 8 / 32
35. Pacotes
Que agrupamento (pacotes)
podemos fazer em nossas
classes?
Poder´ıamos separar as coisas
relativas `a casa das relativas
`a piscina
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
36. Pacotes
Que agrupamento (pacotes)
podemos fazer em nossas
classes?
Poder´ıamos separar as coisas
relativas `a casa das relativas
`a piscina
2 pacotes: casa e piscina
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
37. Pacotes
Que agrupamento (pacotes)
podemos fazer em nossas
classes?
Poder´ıamos separar as coisas
relativas `a casa das relativas
`a piscina
2 pacotes: casa e piscina
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 9 / 32
39. Pacotes
Casa.java:
package casa;
class Casa { ... }
CasaQuad.java:
package casa;
class CasaQuad extends Casa { .. }
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
40. Pacotes
Casa.java:
package casa;
class Casa { ... }
CasaQuad.java:
package casa;
class CasaQuad extends Casa { .. }
CasaRet.java:
package casa;
class CasaRet extends Casa { ... }
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
41. Pacotes
Casa.java:
package casa;
class Casa { ... }
CasaQuad.java:
package casa;
class CasaQuad extends Casa { .. }
CasaRet.java:
package casa;
class CasaRet extends Casa { ... }
AreaPiscina.java:
package piscina;
class AreaPiscina { ... }
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 10 / 32
43. Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
44. Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
$ javac casa/Casa.java
$ javac casa/CasaRet.java
$ javac casa/CasaQuad.java
$ javac piscina/AreaPiscina.java
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
45. Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
$ javac casa/Casa.java
$ javac casa/CasaRet.java
$ javac casa/CasaQuad.java
$ javac piscina/AreaPiscina.java
E o diret´orio conter´a
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
46. Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
$ javac casa/Casa.java
$ javac casa/CasaRet.java
$ javac casa/CasaQuad.java
$ javac piscina/AreaPiscina.java
E o diret´orio conter´a
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
47. Pacotes
E como compilamos
isso?
Do diret´orio pai, onde
est˜ao os diret´orios casa e
piscina
$ javac casa/Casa.java
$ javac casa/CasaRet.java
$ javac casa/CasaQuad.java
$ javac piscina/AreaPiscina.java
E o diret´orio conter´a
Note os .class
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 11 / 32
48. Pacotes
E o que acontece ao
compilarmos
Residencia?
class Residencia {
Casa casa;
AreaPiscina piscina;
Residencia(Casa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 12 / 32
49. Pacotes
E o que acontece ao
compilarmos
Residencia?
class Residencia {
Casa casa;
AreaPiscina piscina;
Residencia(Casa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Linha de Comando
$ javac Residencia.java
Residencia.java:6: cannot find symbol
symbol : class Casa
location: class Residencia
Casa casa;
^
Residencia.java:8: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
AreaPiscina piscina;
^
Residencia.java:13: cannot find symbol
symbol : class Casa
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
Residencia.java:13: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
4 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 12 / 32
50. Pacotes
O compilador n˜ao sabe
onde est´a nem Casa
nem AreaPiscina
Linha de Comando
$ javac Residencia.java
Residencia.java:6: cannot find symbol
symbol : class Casa
location: class Residencia
Casa casa;
^
Residencia.java:8: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
AreaPiscina piscina;
^
Residencia.java:13: cannot find symbol
symbol : class Casa
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
Residencia.java:13: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
4 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
51. Pacotes
O compilador n˜ao sabe
onde est´a nem Casa
nem AreaPiscina
Ir´a buscar sempre no
mesmo diret´orio do
arquivo compilado.
Linha de Comando
$ javac Residencia.java
Residencia.java:6: cannot find symbol
symbol : class Casa
location: class Residencia
Casa casa;
^
Residencia.java:8: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
AreaPiscina piscina;
^
Residencia.java:13: cannot find symbol
symbol : class Casa
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
Residencia.java:13: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
4 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
52. Pacotes
O compilador n˜ao sabe
onde est´a nem Casa
nem AreaPiscina
Ir´a buscar sempre no
mesmo diret´orio do
arquivo compilado.
Se n˜ao estiver l´a, dar´a
erro
Linha de Comando
$ javac Residencia.java
Residencia.java:6: cannot find symbol
symbol : class Casa
location: class Residencia
Casa casa;
^
Residencia.java:8: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
AreaPiscina piscina;
^
Residencia.java:13: cannot find symbol
symbol : class Casa
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
Residencia.java:13: cannot find symbol
symbol : class AreaPiscina
location: class Residencia
Residencia(Casa casa, AreaPiscina
piscina) {
^
4 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 13 / 32
53. Pacotes
E como dizemos a ele
onde est´a?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
54. Pacotes
E como dizemos a ele
onde est´a?
Novamente, com import
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
55. Pacotes
E como dizemos a ele
onde est´a?
Novamente, com import
import casa.Casa;
import piscina.AreaPiscina;
class Residencia {
Casa casa;
AreaPiscina piscina;
Residencia(Casa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
56. Pacotes
E como dizemos a ele
onde est´a?
Novamente, com import
import casa.Casa;
import piscina.AreaPiscina;
class Residencia {
Casa casa;
AreaPiscina piscina;
Residencia(Casa casa,
AreaPiscina piscina) {
this.casa = casa;
this.piscina = piscina;
}
}
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 14 / 32
57. Pacotes
Se n˜ao especificamos o
modificador, ele ´e
“friendly”
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
58. Pacotes
Se n˜ao especificamos o
modificador, ele ´e
“friendly”
Acesso somente interno
ao pacote
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
59. Pacotes
Se n˜ao especificamos o
modificador, ele ´e
“friendly”
Acesso somente interno
ao pacote
Que fazer?
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 15 / 32
60. Pacotes
Tornar p´ublico o acesso
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
61. Pacotes
Tornar p´ublico o acesso
package piscina;
public class AreaPiscina
{... }
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
62. Pacotes
Tornar p´ublico o acesso
package piscina;
public class AreaPiscina
{... }
e
package casa;
public class Casa {... }
Linha de Comando
$ javac Residencia.java
Residencia.java:1: casa.Casa is not
public in casa; cannot be accessed from
outside package
import casa.Casa;
^
Residencia.java:2: piscina.AreaPiscina
is not public in piscina; cannot be
accessed from outside package
import piscina.AreaPiscina;
^
...
6 errors
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 16 / 32
63. Pacotes
O mesmo deve ser
feito com projeto:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
64. Pacotes
O mesmo deve ser
feito com projeto:
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
65. Pacotes
O mesmo deve ser
feito com projeto:
Contudo, para que o
main possa criar os
objetos, teremos
tamb´em que tornar
p´ublicas
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
66. Pacotes
O mesmo deve ser
feito com projeto:
Contudo, para que o
main possa criar os
objetos, teremos
tamb´em que tornar
p´ublicas
CasaRet
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
67. Pacotes
O mesmo deve ser
feito com projeto:
Contudo, para que o
main possa criar os
objetos, teremos
tamb´em que tornar
p´ublicas
CasaRet
CasaQuad
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 17 / 32
68. Pacotes
Bem como
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
69. Pacotes
Bem como
O construtor CasaRet
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
70. Pacotes
Bem como
O construtor CasaRet
O construtor
CasaQuad
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
71. Pacotes
Bem como
O construtor CasaRet
O construtor
CasaQuad
Os m´etodos area (nas
3 classes do diret´orio
casa)
import java.util.Scanner;
import casa.CasaRet;
import casa.CasaQuad;
import casa.Casa;
import piscina.AreaPiscina;
class Projeto {
Residencia[] condominio;
int ultimo = -1;
...
public static void main(String[] args) {
CasaRet cr = new CasaRet(10,5,1320);
CasaQuad cq = new CasaQuad(10,1523);
Residencia r1 = new Residencia(cr, null);
Residencia r2 = new Residencia(cq, null);
System.out.println("´Area (r1): "+
r1.casa.area());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 18 / 32
72. Pacotes
Agora temos todo o
projeto pronto.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
73. Pacotes
Agora temos todo o
projeto pronto.
Como fazemos para
rodar Projeto?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
74. Pacotes
Agora temos todo o
projeto pronto.
Como fazemos para
rodar Projeto?
Linha de Comando
$ java Projeto
´Area (r1): 150.0
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
75. Pacotes
Agora temos todo o
projeto pronto.
Como fazemos para
rodar Projeto?
Linha de Comando
$ java Projeto
´Area (r1): 150.0
Funciona porque estamos no mesmo diret´orio dele
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 19 / 32
76. Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
77. Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
java casa.CasaQuad ou
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
78. Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
java casa.CasaQuad ou
java casa/CasaQuad
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
79. Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
java casa.CasaQuad ou
java casa/CasaQuad
Linha de Comando
$ java casa/CasaQuad
CasaQuad
$ java casa.CasaQuad
CasaQuad
(em seu main h´a somente
um println com o nome
da classe)
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
80. Pacotes
E se quisermos rodar
CasaQuad, por
exemplo, que est´a
dentro do diret´orio
casa?
java casa.CasaQuad ou
java casa/CasaQuad
Repare que ´e / e n˜ao
Linha de Comando
$ java casa/CasaQuad
CasaQuad
$ java casa.CasaQuad
CasaQuad
(em seu main h´a somente
um println com o nome
da classe)
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 20 / 32
81. Pacotes
Finalmente, e se a
classe estiver em um
subdiret´orio dentro de
um subdiret´orio?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
82. Pacotes
Finalmente, e se a
classe estiver em um
subdiret´orio dentro de
um subdiret´orio?
Colocamos todo o
caminho na declara¸c˜ao
package
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
83. Pacotes
Finalmente, e se a
classe estiver em um
subdiret´orio dentro de
um subdiret´orio?
Colocamos todo o
caminho na declara¸c˜ao
package
package subdir1.subdir2;
public class X {
...
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
84. Pacotes
Finalmente, e se a
classe estiver em um
subdiret´orio dentro de
um subdiret´orio?
Colocamos todo o
caminho na declara¸c˜ao
package
package subdir1.subdir2;
public class X {
...
}
Todo o caminho a partir da raiz do projeto → onde est´a a
classe principal e a partir de onde todas ser˜ao compiladas.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 21 / 32
86. Pacotes
E para compilar? Linha de Comando
$ javac subdir1/subdir2/X.java
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
87. Pacotes
E para compilar? Linha de Comando
$ javac subdir1/subdir2/X.java
E para rodar?
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
88. Pacotes
E para compilar? Linha de Comando
$ javac subdir1/subdir2/X.java
E para rodar?
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 22 / 32
89. Pacotes
Repare que Java
sempre pressup˜oe uma
hierarquia de pacotes
package subdir1.subdir2;
public class X {
....
}
Linha de Comando
$ javac subdir1/subdir2/X.java
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
90. Pacotes
Repare que Java
sempre pressup˜oe uma
hierarquia de pacotes
Tudo deve ser planejado
de modo que haja uma
raiz
package subdir1.subdir2;
public class X {
....
}
Linha de Comando
$ javac subdir1/subdir2/X.java
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
91. Pacotes
Repare que Java
sempre pressup˜oe uma
hierarquia de pacotes
Tudo deve ser planejado
de modo que haja uma
raiz
Tudo deve ser
compilado/rodado a partir
dessa raiz
package subdir1.subdir2;
public class X {
....
}
Linha de Comando
$ javac subdir1/subdir2/X.java
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
92. Pacotes
Repare que Java
sempre pressup˜oe uma
hierarquia de pacotes
Tudo deve ser planejado
de modo que haja uma
raiz
Tudo deve ser
compilado/rodado a partir
dessa raiz
N˜ao h´a um ../
package subdir1.subdir2;
public class X {
....
}
Linha de Comando
$ javac subdir1/subdir2/X.java
Linha de Comando
$ java subdir1/subdir2/X
$ java subdir1.subdir2.X
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 23 / 32
93. Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
public class X {
private int y = 2;
}
public class Y {
public void f() {
X obj = new X();
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
94. Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
N˜ao poder´ıamos fazer:
public class X {
private int y = 2;
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.y);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
95. Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
N˜ao poder´ıamos fazer:
Que fazer?
public class X {
private int y = 2;
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.y);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
96. Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
N˜ao poder´ıamos fazer:
Que fazer?
Dar acesso a ele via um
m´etodo p´ublico: um getter
public class X {
private int y = 2;
public int getY() {
return(y);
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.y);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
97. Getters e Setters
E se desej´assemos permitir
o acesso indireto a um
atributo privado, a partir
de outra classe?
N˜ao poder´ıamos fazer:
Que fazer?
Dar acesso a ele via um
m´etodo p´ublico: um getter
E ent˜ao fazer uma chamada a
esse m´etodo
public class X {
private int y = 2;
public int getY() {
return(y);
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 24 / 32
98. Getters e Setters
Da mesma forma, seu
valor pode ser mudado por
outro m´etodo p´ublico
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
99. Getters e Setters
Da mesma forma, seu
valor pode ser mudado por
outro m´etodo p´ublico
Um setter
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
100. Getters e Setters
Da mesma forma, seu
valor pode ser mudado por
outro m´etodo p´ublico
Um setter
Usado da mesma forma
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 25 / 32
101. Getters e Setters
Poss´ıveis usos: public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
102. Getters e Setters
Poss´ıveis usos:
Permitir acesso apenas
para escrita (remove-se o
getter)
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
103. Getters e Setters
Poss´ıveis usos:
Permitir acesso apenas
para escrita (remove-se o
getter)
Permitir acesso apenas
para leitura (remove-se o
setter)
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
104. Getters e Setters
Poss´ıveis usos:
Permitir acesso apenas
para escrita (remove-se o
getter)
Permitir acesso apenas
para leitura (remove-se o
setter)
Testar parˆametro antes de
abastecer atributo (dentro
do setter)
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 26 / 32
105. Getters e Setters
Poss´ıveis usos:
Mudar o formato de um
atributo antes de retornar
(dentro do getter)
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 27 / 32
106. Getters e Setters
Poss´ıveis usos:
Mudar o formato de um
atributo antes de retornar
(dentro do getter)
Ex: Um double 323 que vira
o String “R$ 323,00”
public class X {
private int y = 2;
public int getY() {
return(y);
}
public void setY(int v) {
y = v;
}
}
public class Y {
public void f() {
X obj = new X();
System.out.println(obj.getY());
obj.setY(3);
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 27 / 32
107. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
108. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
109. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
110. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
111. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
112. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
113. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
114. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
115. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
116. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
117. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
118. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
119. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
120. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private S
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
121. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private S N
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
122. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private S N N
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
123. Modificadores
Quanto ao acesso:
Modificador Mesma Mesmo Subclasse Outros
Classe Pacote Pacotes
public S S S S
protected S S S N
nada S S N N
private S N N N
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 28 / 32
126. Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
127. Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
128. Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Classe: a classe n˜ao aceita subclasses
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
129. Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Classe: a classe n˜ao aceita subclasses
static atributo ou m´etodo: c´opia ´unica na
mem´oria
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
130. Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Classe: a classe n˜ao aceita subclasses
static atributo ou m´etodo: c´opia ´unica na
mem´oria
Se usados em classes internas, as torna externas
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
131. Modificadores
Outros modificadores:
final atributo, m´etodo ou classe:
Atributo: seu valor n˜ao pode ser mudado (´e constante)
M´etodo: n˜ao pode ser sobrescrito
Classe: a classe n˜ao aceita subclasses
static atributo ou m´etodo: c´opia ´unica na
mem´oria
Se usados em classes internas, as torna externas
Indica quais atributos/m´etodos devem ser considerados
pertencentes `a classe e n˜ao espec´ıficos a cada objeto
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 29 / 32
133. Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
134. Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Podemos tamb´em misturar alguns. Ex:
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
135. Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Podemos tamb´em misturar alguns. Ex:
public static final
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
136. Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Podemos tamb´em misturar alguns. Ex:
public static final
static abstract final
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
137. Modificadores
Outros modificadores:
abstract: veremos mais adiante
native, strictfp, synchronized, trasient,
volatile: n˜ao veremos
Podemos tamb´em misturar alguns. Ex:
public static final
static abstract final
etc.
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 30 / 32
138. Construtores Private
Poss´ıvel uso: Singleton
public class Singleton {
private static Singleton
copia = new Singleton();
private Singleton() {}
public static Singleton copia()
{
return copia;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
139. Construtores Private
Poss´ıvel uso: Singleton
Garante a existˆencia de
c´opia ´unica do objeto
public class Singleton {
private static Singleton
copia = new Singleton();
private Singleton() {}
public static Singleton copia()
{
return copia;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
140. Construtores Private
Poss´ıvel uso: Singleton
Garante a existˆencia de
c´opia ´unica do objeto
Ningu´em consegue criar
objeto da classe
public class Singleton {
private static Singleton
copia = new Singleton();
private Singleton() {}
public static Singleton copia()
{
return copia;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32
141. Construtores Private
Poss´ıvel uso: Singleton
Garante a existˆencia de
c´opia ´unica do objeto
Ningu´em consegue criar
objeto da classe
No m´aximo, pedir a
referˆencia `a ´unica c´opia
existente
public class Singleton {
private static Singleton
copia = new Singleton();
private Singleton() {}
public static Singleton copia()
{
return copia;
}
}
Norton Trevisan Roman Aula 20 – Especificadores de acesso e Pacotes 12 de maio de 2020 31 / 32