回 帖 发 新 帖 刷新版面

主题:[讨论]请大家帮我看看谢谢了

abstract class Employee
{
    public String name;
    public abstract double earning();
}

class YearWorker extends Employee
{
     double yearslary;
     YearWorker(){}
    YearWorker(String yourname,double slary)
        {
            name=yourname;
            yearslary=slary;
        }

    public void setslary(double slary)
        {
            yearslary=slary;
        }

    public double earning()
        {
            return yearslary;
        }

    public String toString()
        {
            return String.format("姓名:%s,工资%f",name,yearslary);
        }
}
public class Example
{
    public static void main(String args[])
        {
            Employee a;
            a=new YearWorker("大明",123.45);
           a.name="dongxi";
[color=FF0000]//            a.setslary(150.12);
//        a.yearslary=160.35;[/color]        System.out.println(a.toString());
        }
}
我用的是上转型,为什么注释的这几行他们不能运行啊?谢谢

回复列表 (共5个回复)

沙发

public String toString() {
        
        //return String..format("姓名:%s,工资%f",name,yearslary);//c语言写法
        
        return "姓名:"+name+",工资:"+yearslary;

    }


public static void main(String args[]) {
        
        //Employee a;  //你的类Employee没有setslary()方法

        YearWorker a;
        
        a = new YearWorker("大明", 123.45);
        a.name = "dongxi";
        
        a.setslary(150.12);
        
        a.yearslary=160.35;
        
        System.out.println(a.toString());
    }

板凳

不是啊,我是用的上转型,Employee他能够调用YearWorker中的toString()和构造函数哦!
[color=FF0000]Employee a;
            a=new YearWorker("大明",123.45);[/color]

3 楼

Employee类默认也是有toString()方法的,
只是,你在YearWorker类中,把它重写了

4 楼

我认为:
    用父类声明一个对象,而用子类进行实例化,那么被声明的对象只能调用父类的方法.
    你的父类里没有setslary(double slary)这个方法,所以不能这样调用.
        

5 楼

lz我用netbeans 5.5 运行了你的程序,工具提示我要在Employee中对方法setslary()和成员变量yearslary进行声明
所以我认为虽然你用的是上传型,也是想用YearWorker 中的方法,但只要你用Employee定义句柄就需要在他里面进行声明。
还有a.yearslary=160.35;这句会出问题,因为你会发现System.out.println(a.toString());运行后yearslary的值是150.12。因为a.yearslary=160.35;是把值付给Employee中的yearslary。

我来回复

您尚未登录,请登录后再回复。点此登录或注册