今天在csdn上看到有人提出这样一个问题:
				
						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都是对的。为什么只有两个答案呢?
				 
				当时回答给他的答案是,默认类的构造函数是friendly的,所以A是错误的,但是又看了下楼主发布的测试代码
				
						很高兴大家的关注;
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的吗?
希望大家继续帮忙解惑!
				 
				     当时直接看了这个代码,自己也没有考虑是否正确,就误认为是正确的,开始疑惑起来了。接着又做了下面的测试才发现真正的原因:
				
						
								-  类的默认构造函数(非手工实现)的访问权限是跟类的访问权限相关的,可以见下面的测试。 
 
				
						
								比如,一个类:
						
						
								A{}
						
						
								用javap进行反编译查看代码为:
						
						
								class A extends java.lang.Object
						
						
								{
						
						
								    A(){}
						
						
								}
						
				 
				
						
								如果写成 
						
						
								public class A{}
						
						
								反编译后为:
						
						
								public class A extends java.lang.Object
						
						
								{
						
						
								  public A(){}
						
						
								}