日期:2014-05-20  浏览次数:20674 次

关于private构造方法的问题

1、这个报错  
class   a  
{  
private   a()  
{  
}  
a(int   e)  
{  
}  
}  
class   d   extends   a  
{  
}  
2、这个也报错  
class   a  
{  
a(int   e)  
{  
}  
private   a()  
{  
}  

}  
class   d   extends   a  
{  
}  
3、这个通过  
class   a  
{  
private   a(int   e)  
{  
}  
a()  
{  
}  

}  
class   d   extends   a  
{  
}  
4、这个也通过  
class   a  
{  
a()  
{  
}  

private   a(int   e)  
{  
}  

}  
class   d   extends   a  
{  
}  
5、报错  
class   a  
{  
private   a(int   e)  
{  
}  
}  
class   d   extends   a  
{  
}  
当一个构造方法被声明为private时,该累是不能被继承的。可是为什么当方法重载时只有那个没有参数的声明为private时候才报错呢   ?而当是只有一个带参数的构造方法被声明为private时候才报错呢??~~

------解决方案--------------------
"当一个构造方法被声明为private时,该累是不能被继承的。 " 哪说的...

1,2,5你自定义了构造方法,所以编译器不会为你自动添加默认构造方法(不带参数的构造方法).当该类被继承时,器子类的编译器自动添加的默认构造方法会调用父类的默认构造方法,可惜找不到,或者看不到(private),所以报错.

3,4你显示定义了默认构造方法,所以编译通过.

------解决方案--------------------
楼上正解