Given:
1. package geometry;
2. public class Hypotenuse {
3. public InnerTriangle it = new InnerTriangle();
4. class InnerTriangle {
5. public int base;
6. public int height;
7. }
8. }
Which is true about the class of an object that can reference the
variable base?
A. It can be any class.
B. No class has access to base.
C. The class must belong to the geometry package.
D. The class must be a subclass of the class Hypotenuse.

解决方案 »

  1.   

    C. The class must belong to the geometry package. 
      

  2.   

    看不明白,只知道产生了两个类:Hypotenuse$InnerTriangle.class , Hypotenuse.class
    有待高手解析。
      

  3.   

    类InnerTriangle的修饰为default,只有同包下的类才能访问
      

  4.   

    A是废话
    B没有类是基类的子类,不对,任何类都是object的子类
    C没错,是属于geometry,因为第一句package geometry
    D没有任何extends语句,也只有一个内部类InnerTriangle,所以是Hypotenuse的子类错误
      

  5.   

    经过测试,答案为C,只有同一个包内的类能访问到base
    代码如下:同一个包pack包下的非继承类也能够访问,故D错:package pack;public class Temp {
    public Inner it = new Inner();

    class Inner{
    public int base;
    public int height;
    }
    }package pack;public class Test {
    public static void main(String[] args){
    Temp tem = new Temp();
    int a = tem.it.base;
    }
    }另一个包pack1 下测试,访问不到,编译期报错:package pack1;import pack.*;public class Test {
    public static void main(String[] args) {
    Temp tem = new Temp();

    //error: The type Temp.Inner is not visible
    int a = tem.it.base;
    }
    }
    PS:这种问题其实自己跑一下程序就出来了
      

  6.   

    因为InnerTriangle 为默认的访问权限,即为包访问权限,所以只在包中可见。选C