Hiding of Class Variables
class Point { static int x = 2; } class Test extends Point { static double x = 4.7; public static void main(String[] args) { new Test().printX(); } void printX() { System.out.println(x + " " + super.x); } }
This program produces the output:
4.7 2
because the declaration of
x
in
class Test
hides the definition
of x
in class Point
, so
class Test
does not inherit the
field x
from its
superclass Point
. Within the declaration of
class Test
, the simple name x
refers to the field declared within
class Test
. Code in class Test
may refer to the field x
of
class Point
as super.x
(or,
because x
is static
,
as Point.x
). If the declaration
of Test.x
is deleted:
class Point { static int x = 2; } class Test extends Point { public static void main(String[] args) { new Test().printX(); } void printX() { System.out.println(x + " " + super.x); } }
then the field
x
of
class Point
is no longer hidden within
class Test
; instead, the simple
name x
now refers to the
field Point.x
. Code in
class Test
may still refer to that same field
as super.x
.
Therefore, the output from this variant
program is:
2 2
1 comment:
Superb blog post.
Java course in Pune
Post a Comment