Dúvida no operador '.'

No livro da Kathy Sierra, está escrito a seguinte frase:

“Members accessed without the dot operator (.) must belong to the same class.”

Mas, veja o seguinte código:

class A{int x = 0;} class B extends A{int y = x;}

Aqui eu estou acessando o ‘x’ sem o operador ‘.’, sendo que ele está definido na outra class (A). Isso não fura a afirmação dada pelo livro?

Obrigado.

Pois é se isso for uma afirmação, creio que o livro pode estar equivocado, pq vc usando “.” seria juntamente com o “this”, ou um objeto que nao seja o corrente. Mas dessa forma que vc mostrou funciona tb.

[quote=TiagoTC]No livro da Kathy Sierra, está escrito a seguinte frase:

“Members accessed without the dot operator (.) must belong to the same class.”

Mas, veja o seguinte código:

class A{int x = 0;} class B extends A{int y = x;}

Aqui eu estou acessando o ‘x’ sem o operador ‘.’, sendo que ele está definido na outra class (A). Isso não fura a afirmação dada pelo livro?

Obrigado.[/quote]

As instâncias da classe B são também instâncias da classe A.
Ele herda o atributo da classe A através da palavra-chave extends.

[quote=TiagoTC]No livro da Kathy Sierra, está escrito a seguinte frase:

“Members accessed without the dot operator (.) must belong to the same class.”

Mas, veja o seguinte código:

class A{int x = 0;} class B extends A{int y = x;}

Aqui eu estou acessando o ‘x’ sem o operador ‘.’, sendo que ele está definido na outra class (A). Isso não fura a afirmação dada pelo livro?

Obrigado.[/quote]

Confuso.

Quando usamos herança, estamos definindo a visibilidade entre essas classes. Partindo desse ponto de vista, a afirmação do livro
está equivocada.

[quote=TiagoTC]No livro da Kathy Sierra, está escrito a seguinte frase:

“Members accessed without the dot operator (.) must belong to the same class.”

Mas, veja o seguinte código:

class A{int x = 0;} class B extends A{int y = x;}

Aqui eu estou acessando o ‘x’ sem o operador ‘.’, sendo que ele está definido na outra class (A). Isso não fura a afirmação dada pelo livro?

Obrigado.[/quote]

O java aceita que chame sem o ponto por causa do sombreamento. o que a a Kathy está lhe dizendo é que isso é uma má prática.
O uso do ponto serve para driblar o sombreamento, então sempre que chamar por algo fora da classe deve usar o ponto junto com this ou super.
Esse codigo assima funciona, mas está pessimanente construido.

Por essas e outras quem em bons exemplos de código sempre usam o this neste tipo de situação…

sempre é bommm