黑马程序员技术交流社区

标题: 类和对象的调用问题 [打印本页]

作者: HM周磊    时间: 2013-3-4 11:55
标题: 类和对象的调用问题
本帖最后由 HM周磊 于 2013-3-7 19:29 编辑

/*
假如我们在开发一个系统时需要对员工进行建模。员工包含3个属性:姓名,工号,工资。经理也是
员工,除了含有员工的属性外,另外还有一个奖金属性。请使用继承的思想设计出员工类和经理类
要求类中提供必要的方法进行属性访问。。。

思想 :
        1.员工类 :naem gonghao gongzi
        2.经理类 :继承了员工还有一个jiangjin属性。
*/

abstract class ren
{
        private String name;
        private String gonghao;
        private int gongzi;
        ren(String name,String gonghao,int gongzi)
        {
                        this.name =name;
                        this.gonghao =gonghao;
                        this.gongzi =gongzi;
        }
        public abstract void gongzuo();


}

class yuangong extends ren
{        
        yuangong(String name,String gonghao,int gongzi)
        {
                super(name,gonghao,gongzi);
        }
        public void gongzuo()
        {
                System.out.println("一般工作");
        }
}

class jinli extends ren
{
        private double jiangji;
        jinli(String name,String gonghao,int gongzi)
        {
                super(name,gonghao,gongzi);
                this.jiangji = jiangji;
        }
        public void gongzuo()
        {
                System.out.println("管理工作");
        }
}


class LianXi6
{
        public static void main(String[] args)
        {
                System.out.println("Hello World!");
        }
}

请问我想调用员工类和经理类中的工作方法,在主函数中要怎么写???:'(
我写了new yuangong.gongzuo();为什么会报错???
作者: 张子凯    时间: 2013-3-4 12:03
本帖最后由 张子凯 于 2013-3-4 12:07 编辑

你的写法有问题,没有传进参数,其实是因为没找到相应构造函数。
可以用以下代码:

class LianXi6
{
        public static void main(String[] args)
        {
                new yuangong("zhang","S8",9000);      

        }
}

作者: 陈圳    时间: 2013-3-4 12:04
package Day22;
abstract class ren
{
        private String name;
        private String gonghao;
        private int gongzi;
        ren(){};//增加一个空参数的构造函数...
        ren(String name,String gonghao,int gongzi)
        {
                        this.name =name;
                        this.gonghao =gonghao;
                        this.gongzi =gongzi;
        }
        public abstract void gongzuo();


}

class yuangong extends ren
{        
        yuangong(String name,String gonghao,int gongzi)
        {
                super(name,gonghao,gongzi);
        }
        yuangong(){}//增加一个空参数的构造函数...
        public void gongzuo()
        {
                System.out.println("一般工作");
        }
}

class jinli extends ren
{
        private double jiangji;
        jinli(String name,String gonghao,int gongzi)
        {
                super(name,gonghao,gongzi);
                this.jiangji = jiangji;
        }
        jinli(){}//方便创建对象...
        public void gongzuo()
        {
                System.out.println("管理工作");
        }
}


class Test5
{
        public static void main(String[] args)
        {
                   new yuangong().gongzuo();
               new jinli().gongzuo();//空参数的构造函数的调用方法
               new yuangong("张三","1002",2500).gongzuo();//带参数的构造方法调用....
               new jinli("李四","1001",4000).gongzuo();
        }
}

作者: 何仕映    时间: 2013-3-4 12:06
因为gongzuo()方法不是静态,必须要通过对象去调用。你在调用的时候应该是new yuangong().gongzuo();有什么不明白的我们共同探讨哈,我的QQ是:934755780.
作者: 寇弘禄    时间: 2013-3-4 12:42
new yuangong("xx","01",2000)  你的员工的构造函数构造函数需要传入参数,如果想创建对象时不传入参数 需要再定义一个无参的构造函数。
还有你的jinli类中的构造函数没有传入jiangjin这个参数,而在构造函数里用到了这个参数,所以也会报错。
jinli(String name,String gonghao,int gongzi,int jiangjin)
        {
                super(name,gonghao,gongzi);
                this.jiangji = jiangji;
        }

作者: 花伟昌    时间: 2013-3-4 13:09
本帖最后由 花伟昌 于 2013-3-4 13:11 编辑

abstract class ren
{
         private String name;
         private String gonghao;
         private int gongzi;
     ren()   --------------------------------------------------------------->添加一个无参的构造函数!
       {
       }
         ren(String name,String gonghao,int gongzi)
         {
                         this.name =name;
                         this.gonghao =gonghao;
                         this.gongzi =gongzi;
         }
         public abstract void gongzuo();

}

class yuangong extends ren
{        
   yuangong() --------------------------------------------------------------->也添加一个无参的构造函数!
     {
     }
  
        yuangong(String name,String gonghao,int gongzi)
         {
                 super(name,gonghao,gongzi);
         }
         public void gongzuo()
         {
                 System.out.println("一般工作");
         }
}

class jinli extends ren
{
         private double jiangji;
         jinli(String name,String gonghao,int gongzi)
         {
                 super(name,gonghao,gongzi);
                 this.jiangji = jiangji;
         }
         public void gongzuo()
         {
                 System.out.println("管理工作");
         }
}

class LianXi6
{
         public static void main(String[] args)
        {
                 
          new yuangong().gongzuo();//在上面代码中添加无参的构造函数,就能够调用了
    
          new yuangong("...","...",...).gongzuo();//另一种方法:不在代码中添加无参数的构造函数,在此传入构造函数的参数,也可以调用。
         }
}

作者: HM周磊    时间: 2013-3-4 16:46
花伟昌 发表于 2013-3-4 13:09
abstract class ren
{
         private String name;

谢谢,写得非常详细,对我帮助很大!!!!:victory:
作者: 文密    时间: 2013-3-4 21:09
abstract class Ren
{
         private String name;
         private String gonghao;
         private int gongzi;
         Ren(String name,String gonghao,int gongzi)
         {
                         this.name =name;
                         this.gonghao =gonghao;
                         this.gongzi =gongzi;
         }
         public abstract void gongzuo();

}

class Yuangong extends ren
{        
        Yuangong(String name,String gonghao,int gongzi)
         {
                 super(name,gonghao,gongzi);
         }
         public void gongzuo()
         {
                 System.out.println("一般工作");
         }
}

class JinLi extends ren
{
         private double jiangji;
         JinLi(String name,String gonghao,int gongzi,double jiangji)
         {
                 super(name,gonghao,gongzi);
                 this.jiangji = jiangji;
         }
         public void gongzuo()
         {
                 System.out.println("管理工作");
         }
}

class LianXi6
{
         public static void main(String[] args)
        {
                Yuangong yuan=new Yuangong("张三","开发0002",8000);
                            yuan.gongzuo();
                 JinLi  jinli=new JinLi("张三","开发0002",80000,);
                             jinli.gongzuo();
         }
}

  还是希望你的输写方法主意点啊
  类名:首字要大写
变量名:第二字母首字母也需要 大字
希望养成好的编程习惯



作者: amen0205    时间: 2013-3-5 00:18
你new yuangong.gongzuo();的写法是错误的,  1  创建对象应该是new yuangong();   2 你yuangong的构造函数有参数的  所以应该是  new yuangong("lili","888",5000);这样才行。   3  调用方法  new yuangong("lili","888",5000).gongzuo(); OK了。   4  书写习惯一定要注意   类名首字符要大些   函数名和变量名第二个字母开始首字母大写。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2