I discovered something about Java's type system today.
Suppose there are three Java classes, A, B and C. C extends B and B extends A. A is in package p1. B and C are in package p2. A and C are normal public classes, but B is package private. From package p3, can I see that C is a subclass of A?
In other words, given the following classes:
package p1;
public class A {
public void sayHi() {
System.out.println("hi");
}
}
package p2;
class B extends p1.A {
}
package p2;
public class C extends B {
}
Will this code compile (and run)?
package p3;
public class Run {
public static void main(String[] args) {
p1.A c = new p2.C();
c.sayHi();
}
}
Answer in blue on blue text here: Yes, and I wonder what evil tricks I can pull in my public APIs as a result.