abstract class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
} public abstract void work();

}
//描述程序员。
class Programmer extends Employee
{
Programmer(String name,String id,double pay)
{
super(name,id,pay);
}
public void work()
{
System.out.println("code...");
}
}//描述经理。 
class Manager extends Employee
{
private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("manage");
}
}
class  AbstractTest
{
public static void main(String[] args) 
{

}
}主方法那没写内容。想问下private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
一开始不是定义了 String name 有默认初始化了吗?为什么还要定义一个Employee方法传入 name,id,pay初始化呢?     不是很懂 

解决方案 »

  1.   

    楼主是新学Java吧,这个问题说明你喜欢思考,这些事Java中重要的特性。
    你说的默认初始化和老师或者说我们实际说的初始化有些不同吧,
    private String name;
    private String id;
    private double pay;
    这三个是类的成员变量,也就是常说的类的属性,jvm会给成员变量默认初始化的,引用默认初始化为null,简单类型针对不同的类型初始化为不同的值。所以这三个属性如果你没有在构造方法中传入有效的值,或者调用setter方法,就是null,null,0.0,
    而我们平时说的初始化其实是指给属性赋值,因为我们要获得这些属性的值去做运算,如果没有在构造的时候传入值,这些数据对实际应用中就是指没有初始化的,是没有意义的。
    其实就是初始化的偏向不同,默认初始化时专业的术语,而我们说的初始化时偏向开发应用的。
    祝:爱思考的楼主学习进步~
      

  2.   

    刚开始的时候以视频为主导,视频推荐毕向东的http://edu.csdn.net/news/2012821/83780387427c.shtml,跟着练习实践,慢慢的你就会遇到一些问题,然后会思考,这个时候可以结合书籍来学习,书籍推荐《Java核心技术》上卷,学习编程主要你得是真兴趣,这样你就会进步很快,记住一定多敲代码