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

protected void doME() {}
}
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)还能调用……

解决方案 »

  1.   

    protected Alpha(String a) {this.alpha = alpha;}
     改成 this.alpha = a;
      

  2.   

    肯定调用了啊,晕~~只是你的程序没有输出状态,你出现下试一试。
    把这句改掉:protected Alpha(String a) 
    {
        this.alpha = alpha;
    }改成protected Alpha(String a) 
    {
        this.alpha = a;
    }这样你运行一下,肯定能出结果~你有点粗心哦
      

  3.   

    好吧 ,我重新复述下我的问题现在我有俩类一个Appha一个Alpha的子类Beta ,Alpha中带参构造是保护的 ,且俩在不同包
    package com.alpha;public class Alpha {
    public String aa = "das";
    private String alpha;
    public  Alpha() {this("A");}
    protected Alpha(String a) {this.alpha = a;}

    protected void doME() {}
    }
    package com.beta;
    import com.alpha.*;
    public class Beta extends com.alpha.Alpha {
    public Beta(String a) {
    super(a);
    doME();
    aa = "as";
    Alpha aa = new Alpha("A"); //咋就不行啊,这应该可以调用Alpha带参构造的,上面的super(a);还刚调用了呢~~  纠结  

    }

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

  4.   

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

  5.   

    super(a); 这个写法是调用父类的构造方法 
    Alpha aa = new Alpha("A"); 这个写法就是调用一个类的构造方法相当于 super(a); 声明了我要调用父类 这时候是可以访问protected 但是访问不了 private
    而Alpha aa = new Alpha("A"); 这个写法 java 就按照默认调用方法的处理方式 protected必须在同一个包下才能访问
      

  6.   

    最后教一招 如果想用new 这种写法 可以用多态的写法
    即 Alpha aa = new Beta("A"); 这样就可以了 给分吧。。
      

  7.   

    那意思就是说这个是硬性规定了么,但是多态构造的话  它生成的实例对象就不是纯Alpha了,虽然还是有点纠结,但暂且先这样吧  分就给你啦