package sep_19th_2011;
import java.util.GregorianCalendar;
import java.util.Random;public class Mgr_Emp
{
public static void main(String[] args)
{
Manager boss=new Manager("Kevin", 80000, 1977, 8, 22);
boss.setbonus();
Employee_1[] staff=new Employee_1[4];
staff[0]=boss;
staff[1]=new Employee_1("Harry", 56666, 1986, 4, 12);
staff[2]=new Employee_1(40000, 1984, 3, 22);


for(Employee_1 e:staff)
System.out.println("Id:"+e.getId()+"Name"+e.getname()+" ,salary"+e.getsalary());

System.out.println("N ID is:"+nextId);
}
}class Employee_1 
{
public Employee_1(String aname, double asalary, int year, int month, int day)
{
name=aname;
salary=asalary;
GregorianCalendar calendar=new GregorianCalendar(year, month-1, day);
hireDay=calendar.getTime();
}
public Employee_1(double asalary, int year, int month, int day)
{
this("NO."+nextId+"Employee", asalary, year, month, day);
}
    
    public String getname()
    {
     return name;
    }
    public double getsalary()
    {
     return salary;
    }
    public Date gethireDay()
    {
     return hireDay;
    }
   
    public int getId()
    {
     return id;
    }
   
    private String name="Nike";
    private double salary=5000;
    private static int nextId;
    private int id;
    private Date hireDay;    
 static
 {
 Random generator=new Random();
 nextId=generator.nextInt(10000);
 }
 {
 id=nextId;
 nextId++;
 }
}package sep_19th_2011;class Manager extends Employee_1 
{
    public Manager(String name, double salary, int year, int month, int day)
    {
     super(name, salary, year, month, day);
     bonus=0;
    
    }
    public double getsalary()
    {
     double basesalary=super.getsalary();
     return basesalary+bonus;
    }
    public void setbonus()
    {
        bonus=salesincome*1.15;
    
    }
    
    private double bonus;
    private double salesincome=2000;}今天在试验子类和父类继承的问题,上面代码中红色的部分是出错的地方。
1.在MAIN方法下nextId始终显示错误,problem面板上显示nextId cannot be resolved to a variable。是不是在继承情况下,子类无法访问父类的静态初始化块中的变量?
2.用DATE定义hireday,出现的problem是date cannot be resolved to a type。这个又是什么原因呢?

解决方案 »

  1.   

    1.第一个问题是因为你Main类中main方法中访问的nextId是Employee_1  的静态私有变量。Manage继承Employee_1  
    。Main类和Manage,Employee_1的关系是同包。具有包权限,但是访问不了私有权限。你可以这样改。在Employee_1  中把nextId的声明中private删除(就是赋予了包权限)。然后在Main类中main方法中访问,而且你访问的时候也不对。从一个类访问另外一个类的静态成员变量要加上类名称的格式是:类名.静态成员变量。这里面应该是Employee_1.nextId。你是刚接触java吧。类继承还有成员变量的访问权限,你可以看下java编程思想第四版。网上有电子版的。里面关于面向对象这块讲的很详细。可以看看。
    2.第二个问题是因为你没有导入相应的包。只要在开头导入就行了。在import java.util.Random;下面写上import java.util.Date;就行了。
      

  2.   

    关于你的问题,我看是你的变量没有被正确解析,你的变量nextID在Mgr_Emp没有定义。
      

  3.   

    好的,谢谢详细的指导。确实是刚接触JAVA书看得云里雾里的,在着手练习的时候编写思路也不是很清晰。Orz