A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-5-30 16:25  /  1683 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德升 于 2012-6-3 23:14 编辑

/*
class Computer
{
        void run()
        {
                System.out.println("电脑运行");
        }
}

class Teacher
{
        private String name;

        Teacher(String name)
        {
                this.name = name;
        }

        public void prelect()
        {
                new Computer().run();
                System.out.println("上课");
        }
}

class ExceptionTest
{
        public static void main(String[] args)
        {
                new Teacher("毕老师").prelect();
        }
}
*/   





class Teacher
{
        private String name;
        
        private Computer cmpt;

        Teacher(String name,Computer cmpt)
        {
                this.name = name;
                //cmpt = new Computer;
                this.cmpt = cmpt;
        }

        public void prelect()
        {
                cmpt.run();
                System.out.println("上课");
        }
}

class Computer
{
        void run()
        {
                System.out.println("电脑运行");
        }

        void select()
        {
                System.out.println("重启");
        }
}

class ExceptionTest
{
        public static void main(String[] args)
        {
                Teacher t = new Teacher("毕老师","new Computer()");
                t.prelect();
        }
}
/*
为什么注释的编译运行都可以,但是没有注释的却是编译通不过呢,


ExceptionTest.java:77: 错误: 无法将类 Teacher中的构造器 Teacher应用到给定类型;
                Teacher t = new Teacher("毕老师","new Computer");
                            ^
  需要: String,Computer
  找到: String,String
  原因: 无法通过方法调用转换将实际参数String转换为Computer
1 个错误

这是为什么?
如果是引号的关系那为什么不能加呢?
*/

8 个回复

倒序浏览
呃。。你这问题技术含量不高。。。。
你构造函数第二个参数要的是Computer对象,你给了字符串
回复 使用道具 举报
Teacher t = new Teacher("毕老师","new Computer");
这个构造方法需要String 和 Computer 这两个类型的参数。
你加上双引号就是传了两个String了
Teacher t = new Teacher("毕老师",new Computer());
这样写就没问题了
回复 使用道具 举报
丰亚彬 发表于 2012-5-30 16:27
呃。。你这问题技术含量不高。。。。
你构造函数第二个参数要的是Computer对象,你给了字符串 ...

我知道,我只是想知道下为什么。
回复 使用道具 举报
你new对象的时候多加了分号,去掉分号就可以了,你传递的是Computer的引用类型,不是String类型的
  1. class ExceptionTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Teacher t = new Teacher("毕老师",new Computer());
  6.                 t.prelect();
  7.         }
  8. }
复制代码
回复 使用道具 举报
王德升 发表于 2012-5-30 16:37
我知道,我只是想知道下为什么。

类型不兼容,你怎么传递?虚拟机编译都通不过
回复 使用道具 举报
丰亚彬 发表于 2012-5-30 16:41
类型不兼容,你怎么传递?虚拟机编译都通不过

谢谢你了还不行吗,
回复 使用道具 举报
王德升 发表于 2012-5-30 16:46
谢谢你了还不行吗,

好吧,我并无恶意~~~
你把字符串传进去相当于Computer c = new String("new Computer()");
这两个类既没有继承关系也没有实现关系,所以编译器通不过的
回复 使用道具 举报
嗯,楼主把传入的实例对象加上了""双引号变成了字符串常量,因而不能通过。改过来就可以了。
  1. class ExceptionTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Teacher t = new Teacher("毕老师",new Computer());
  6.                 t.prelect();
  7.         }
  8. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马