1. class A {
2. A() { }
3. }
4.
5. class B extends A {
6. }
Which two statements are true? (Choose two)
A. Class B's constructor is public.
B. Class B's constructor has no arguments.
C. Class B's constructor includes a call to this().
D. Class B's constructor includes a call to super().个人认为A,B,D都是对的。为什么只有两个答案呢?

解决方案 »

  1.   

    A. Class B's constructor is public.默认的情况下构造函数是frendly(包内可见)的。除非你显示声明了public or protected or private。
      

  2.   

    To foxty:类中默认的构造函数是public修饰的。这个可用两个不同包中的类建立对象来验证。谢谢你的关注,希望继续关注!
      

  3.   

    我咋觉得只有BD正确呢构造函数未必是public的 如果没有特殊关键字修饰 默认是friendly的访问权限
      

  4.   

    to 楼主: 谁告诉你默认类的构造函数是public的,你把你做的验证的例子哪出来我看看。默认肯定是friendly的~
      

  5.   

    很高兴大家的关注;
    A.java
    package packa;
    class A
    {}
    B.java
    package packb;
    import packa.A;
    class B
    {
         public static void main(String[] args)
         {
             A a=new A();
         }
    }
    编译,运行是ok的。
    可是把A类写成
    class A
    {
        A(){}
    }
    就会出现A() is not public in packa.A; cannot be accessed from outside package
    的错误提示。
    这不是说明默认的A类构造函数是public的吗?
    希望大家继续帮忙解惑!
      

  6.   

    oh。sorry。
    一时匆忙,A类前面忘了写public。
    A.java应该是这样。
    package packa;
    public class A
    {}
     等待大家回复!
      

  7.   

    刚才又重新反编译了A和B两个类,得到以下结果。1,类的默认构造函数(没有人为实现)的访问权限是和类的访问权限修饰符相同的。比如:
    public class A
    {}反编译后的代码为:
    public class A extends java.lang.Object
    {
      public A(){}
    }如果是class A
    反编译后为:
    class A extends java.lang.Object
    {
      A(){}
    }楼主做测试的时候类的访问权限是public的,所以觉得题目答案会有问题,但是题目中的类A和类B的访问权限都是默认的,所以其生成的构造函数的访问权限也是默认的。:)
      

  8.   

    谢谢foxty的一直关注。所以我也总觉得题有些问题。这是SCJP的试题!答案总不能模棱两可的。呵呵。
      

  9.   

    我晕,楼主你的例子恰恰证明了题目是选BD...!!!可是把A类写成
    class A
    {
        A(){}
    }
    就会出现A() is not public -----------------------------------------很高兴大家的关注;
    A.java
    package packa;
    class A
    {}
    B.java
    package packb;
    import packa.A;
    class B
    {
         public static void main(String[] args)
         {
             A a=new A();
         }
    }
    编译,运行是ok的。
    -------------------------
    注意,你这里的class A中没有写构造函数!
    那么
    没有写----> OK
    然后你说:可是把A类写成
    class A
    {
        A(){}
    }
    就会出现A() is not public in packa.A; cannot be accessed from outside package
    的错误提示。
    ---------------------
    注意,你这里的写了构造函数,出现A() is not public
    这样能证明题目中
    1. class A {
    2. A() { }
    3. }
    中的A()是PUBLIC....??
    你这样最多只能证明:
    1.class A {
                      -------->PUBLIC...!
              }
    2. class A {
            A() { } -------->不是PUBLIC...!
             }
      

  10.   

    呵呵。疑惑终于解开了。谢谢foxty以及共同参与的人。