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

求大师
[code=Java][/code]package com.alpha;

public class Alpha {
private String alpha;
public Alpha() {this("A");}
protected Alpha(String a) {this.alpha = alpha;}

protected void doME() {}
}
[code=Java][/code]package com.beta;
import com.alpha.Alpha;
public class Beta extends com.alpha.Alpha {
public Beta(String a) {
super(a);
doME();
Alpha aa = new Alpha("A"); //咋就不行啊!
}

public static void main(String[] args) {
Alpha a = new Alpha();
}
}

为啥不能调用Alpha(String a)? protected我晓得 可是书上说的可以的啊~~ 看super(a)还能调用……


------解决方案--------------------
protected Alpha(String a) {this.alpha = a;}
这个构造方法 访问权限修饰符是 protected 规定必须在同一个包下才能访问 想要在不同的包下 访问这个构造方法 就要改成 public Alpha(String a) {this.alpha = a;}

------解决方案--------------------
super(a); 这个写法是调用父类的构造方法 
Alpha aa = new Alpha("A"); 这个写法就是调用一个类的构造方法

相当于 super(a); 声明了我要调用父类 这时候是可以访问protected 但是访问不了 private
而Alpha aa = new Alpha("A"); 这个写法 java 就按照默认调用方法的处理方式 protected必须在同一个包下才能访问
------解决方案--------------------
最后教一招 如果想用new 这种写法 可以用多态的写法
即 Alpha aa = new Beta("A"); 这样就可以了 给分吧。。。。。