当前位置: 技术问答>java相关
设计构造器与一般方法的访问控制问题!
来源: 互联网 发布时间:2015-10-10
本文导语: AA类是从A类继承而来的, AA类在AA包中,A类在A包中, 现在将A类中有一个访问控制为protected的构造器A(),和一个访问控制为 protected的方法print()。 问题:为什么同在A类中且访问控制都为protected的构造器不能调用,而...
AA类是从A类继承而来的,
AA类在AA包中,A类在A包中,
现在将A类中有一个访问控制为protected的构造器A(),和一个访问控制为
protected的方法print()。
问题:为什么同在A类中且访问控制都为protected的构造器不能调用,而
方法print()可以正常调用?
程序代码如下:
//class a 中的代码
package a;
public class a{
protected a(){
System.out.println("我是a!");
}
protected static void print(){
System.out.println("我是a中的print(!");
}
public static void main(String[] arge){
a l_a = new a();
print();
}
}
//class aa 中的代码
package aa;
import a.*; //引入a包!
class aa extends a {
public static void main(String[] arge){
// a l_a = new a(); //不能访问
print(); //可以访问
}
}
AA类在AA包中,A类在A包中,
现在将A类中有一个访问控制为protected的构造器A(),和一个访问控制为
protected的方法print()。
问题:为什么同在A类中且访问控制都为protected的构造器不能调用,而
方法print()可以正常调用?
程序代码如下:
//class a 中的代码
package a;
public class a{
protected a(){
System.out.println("我是a!");
}
protected static void print(){
System.out.println("我是a中的print(!");
}
public static void main(String[] arge){
a l_a = new a();
print();
}
}
//class aa 中的代码
package aa;
import a.*; //引入a包!
class aa extends a {
public static void main(String[] arge){
// a l_a = new a(); //不能访问
print(); //可以访问
}
}
|
我把你的代码看了一下:你可以这样作:
//class a 中的代码
package a;
public class a{
public a(){
System.out.println("我是a!");
}
protected static void print(){
System.out.println("我是a中的print(!");
}
public static void main(String[] arge){
a l_a = new a();
print();
}
}
//class aa 中的代码
package aa;
import a.*; //引入a包!
class aa extends a {
public static void main(String[] arge){
a l_a = new a();
print();
}
}
也就是把a包中的a类的构造函数protected a(){}改成public a(){}.
因为你在aa类中new a()会调用a类的构造函数,而他又是protected的,所以这样。
//class a 中的代码
package a;
public class a{
public a(){
System.out.println("我是a!");
}
protected static void print(){
System.out.println("我是a中的print(!");
}
public static void main(String[] arge){
a l_a = new a();
print();
}
}
//class aa 中的代码
package aa;
import a.*; //引入a包!
class aa extends a {
public static void main(String[] arge){
a l_a = new a();
print();
}
}
也就是把a包中的a类的构造函数protected a(){}改成public a(){}.
因为你在aa类中new a()会调用a类的构造函数,而他又是protected的,所以这样。
|
你extends它了,那么a里头的protected和public的方法和属性都会一起继承下来的吗.
|
aa访问的print()是它自己的method,管他是protected还是public呢,都可以。
|
protected限制了你的访问权限,你不能生成protected构造函数的实例子,必须在同一个包内。
由于print是static的,所以可以直接在子类中使用。
由于print是static的,所以可以直接在子类中使用。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。