黑马程序员技术交流社区

标题: 编译出错“无法将类中的构造器应用到给定类型”怎么解? [打印本页]

作者: 蓝墨清幽    时间: 2015-4-27 16:00
标题: 编译出错“无法将类中的构造器应用到给定类型”怎么解?
下面开发一个系统,需要对员工进行建模,普通员工包含3个属性:姓名、工号、工资。技术员工属于普通员工。经理也是员工,除员工的属性外,还有一个奖金属性。要求使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。

可是我写的主函数调用里编译出现“无法将类中的构造器应用到给定类型”的错误怎么解???

//普通员工抽象类
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 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("Manager work");
        }
}
//技术员工类
class Pro extends Employee
{
        Pro(String name,String id,double pay)
        {
                super(name,id,pay);
        }
        //覆盖掉父类中的工作内容
        public void work()
        {
                System.out.println("Pro work");
        }
}

class AbstractTest
{
        public static void main(String[] args)
        {
                Manager m = new Manager();
                m.work();
                Pro p = new Pro();
                p.work();
        }
}



作者: 突然世界晴    时间: 2015-4-27 17:12
你没有无参构造噢,
所以,你new的两个类必须要要传参给类中的成员赋值。
作者: 蓝墨清幽    时间: 2015-4-27 17:21
突然世界晴 发表于 2015-4-27 17:12
你没有无参构造噢,
所以,你new的两个类必须要要传参给类中的成员赋值。 ...

帅气!再帮忙看下个吧。
作者: 蓝墨清幽    时间: 2015-4-27 17:23
突然世界晴 发表于 2015-4-27 17:12
你没有无参构造噢,
所以,你new的两个类必须要要传参给类中的成员赋值。 ...

模版方法

需求:获取一段程序运行的时间。
原理:获取程序开始和结束的时间并相减即可。
获取时间方法:System.currentTimeMillis();

abstract class GetTime
{

捕获.PNG (3.31 KB, 下载次数: 122)

捕获.PNG

作者: 突然世界晴    时间: 2015-4-27 17:23
你出现的这两个问题都是一样原因。
注意看提示
找到:没有参数
原因:实参和形参长度不同。

作者: 蓝墨清幽    时间: 2015-4-27 17:24
突然世界晴 发表于 2015-4-27 17:12
你没有无参构造噢,
所以,你new的两个类必须要要传参给类中的成员赋值。 ...

显示不全:L
作者: 突然世界晴    时间: 2015-4-27 17:25
你把代码贴上吧  
作者: 蓝墨清幽    时间: 2015-4-27 17:26
突然世界晴 发表于 2015-4-27 17:23
你出现的这两个问题都是一样原因。
注意看提示
找到:没有参数

原来是创建对象时出错:'(
作者: 蓝墨清幽    时间: 2015-4-27 17:28
本帖最后由 蓝墨清幽 于 2015-4-27 17:56 编辑
突然世界晴 发表于 2015-4-27 17:25
你把代码贴上吧

abstract class GetTime
{
        //模版方法设计模式:在定义功能时,一部分是确定的,一部分不确定。
        public final void getTime()   //加final,获取时间方法禁止被复写
        {
                //获取时间方法
                long start = System.currentTimeMillis();
                //确定的部分在使用不确定的部分
                runcode();
                long end = System.currentTimeMillis();
                System.out.println("开始"+start+"结束"+end+"历时毫秒:"+(end-start));
        }
        //不确定的部分暴露出去
        public abstract void runcode();  //加absract,抽象方法:可以被复写
}
class SubTime extends GetTime
{
        //不确定的部分暴露出去,由该类的子类去完成。
        public void runCode()
        {
                for(int i=0;i<1000;i++)
                {
                        System.out.print(i+“你好\t”);
                }
        }
}
class  TemplateDemo
{
        public static void main(String[] args)
        {
                SubTime st = new SubTime();
                st.getTime();
        }
}

捕获.PNG (3.31 KB, 下载次数: 114)

捕获.PNG

作者: 1017161726    时间: 2015-4-27 17:28
主函数里面的newManager(),你要加四个参数,就对了。
作者: 1017161726    时间: 2015-4-27 17:29
蓝墨清幽 发表于 2015-4-27 17:26
原来是创建对象时出错

对。创建对象要根据构造函数的参数来创建。
作者: 突然世界晴    时间: 2015-4-27 17:30
你实现的是runCode()方法
你的抽象方法是runcode(),java严格区分大小写的 所以你没有重写方法
作者: rick1991chen    时间: 2015-4-27 17:32
上面的方法 一个是runcode()  一个是runCode()
作者: 石义良    时间: 2015-4-27 17:35
没有定义无参的构造函数
作者: 蓝墨清幽    时间: 2015-4-27 17:37
突然世界晴 发表于 2015-4-27 17:30
你实现的是runCode()方法
你的抽象方法是runcode(),java严格区分大小写的 所以你没有重写方法 ...

好吧,我今天算是马虎到家了:L
作者: 蓝墨清幽    时间: 2015-4-27 17:39
rick1991chen 发表于 2015-4-27 17:32
上面的方法 一个是runcode()  一个是runCode()

OK:victory:
作者: 蓝墨清幽    时间: 2015-4-27 17:40
1017161726 发表于 2015-4-27 17:28
主函数里面的newManager(),你要加四个参数,就对了。

下面new Pro();少了三个参数,学习了。:victory:
作者: 蓝墨清幽    时间: 2015-4-27 17:47
本帖最后由 蓝墨清幽 于 2015-4-27 17:59 编辑
突然世界晴 发表于 2015-4-27 17:23
你出现的这两个问题都是一样原因。
注意看提示
找到:没有参数

没有搞懂实参和形参,所以没有找出错误原因。搜了下::victory:

捕获.PNG (17.01 KB, 下载次数: 106)

捕获.PNG

作者: 蓝墨清幽    时间: 2015-4-27 17:58
蓝墨清幽 发表于 2015-4-27 17:28
abstract class GetTime
{
        //模版方法设计模式:在定义功能时,一部分是确定的,一部分不确定。

同时学习了转义字符。
System.out.print(i+"你好\t");

捕获.PNG (29.14 KB, 下载次数: 117)

捕获.PNG

作者: 突然世界晴    时间: 2015-4-27 18:09
加油,形参和实参你那一大堆字看的我头大,
我的理解是 方法上定义的要接收的参数就是形参,不是具体值 只是一种形式类型
实参就是调用改方法时具体传的参数
形参: public void show(String str) //这里str 就是形参
实参: show("云飞扬"); 云飞扬就是实参
作者: 蓝墨清幽    时间: 2015-4-27 18:52
突然世界晴 发表于 2015-4-27 18:09
加油,形参和实参你那一大堆字看的我头大,
我的理解是 方法上定义的要接收的参数就是形参,不是具体值 只 ...

嗯,谢啦。:victory:定义的是形参,调用的是实参。
作者: zuoseven    时间: 2016-1-7 21:04
突然世界晴 发表于 2015-4-27 17:12
你没有无参构造噢,
所以,你new的两个类必须要要传参给类中的成员赋值。 ...

为什么要无参函数啊???
作者: zuoseven    时间: 2016-1-7 21:05
石义良 发表于 2015-4-27 17:35
没有定义无参的构造函数

为什么要无参函数啊?
作者: zuoseven    时间: 2016-1-7 21:07
石义良 发表于 2015-4-27 17:35
没有定义无参的构造函数

为什么要无参函数啊?v




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