class C { int a; static int b; void main(/* C this */) { } static void f() { // fully qualified form System.out.println(this.a); // BAD System.out.println(a); // BAD System.out.println(C.b); // OK System.out.println(b); // OK } } class Animal { int age; } class Human extends Animal { String name; } class Student extends Human { int id; } Human human = new Human(); Student student = new Student(); Human human = new Student(); Object obj = human; Object obj = new Student(); Human human = new Random().nextBoolean() ? new Student() : new Human(); System.out.println(human.name); // OK System.out.println(human.id); // wrong // wrong Student student = new Random().nextBoolean() ? new Student() : new Human(); class A extends B, C {} // not Java