黑马程序员技术交流社区

标题: 代码打印中的问题。<已解决> [打印本页]

作者: 王德升    时间: 2012-5-30 16:25
标题: 代码打印中的问题。<已解决>
本帖最后由 王德升 于 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 个错误

这是为什么?
如果是引号的关系那为什么不能加呢?
*/
作者: 丰亚彬    时间: 2012-5-30 16:27
呃。。你这问题技术含量不高。。。。
你构造函数第二个参数要的是Computer对象,你给了字符串
作者: 黑马张扬    时间: 2012-5-30 16:31
Teacher t = new Teacher("毕老师","new Computer");
这个构造方法需要String 和 Computer 这两个类型的参数。
你加上双引号就是传了两个String了
Teacher t = new Teacher("毕老师",new Computer());
这样写就没问题了
作者: 王德升    时间: 2012-5-30 16:37
丰亚彬 发表于 2012-5-30 16:27
呃。。你这问题技术含量不高。。。。
你构造函数第二个参数要的是Computer对象,你给了字符串 ...

我知道,我只是想知道下为什么。
作者: 何拴绪    时间: 2012-5-30 16:39
你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:41
王德升 发表于 2012-5-30 16:37
我知道,我只是想知道下为什么。

类型不兼容,你怎么传递?虚拟机编译都通不过
作者: 王德升    时间: 2012-5-30 16:46
丰亚彬 发表于 2012-5-30 16:41
类型不兼容,你怎么传递?虚拟机编译都通不过

谢谢你了还不行吗,
作者: 丰亚彬    时间: 2012-5-30 16:53
王德升 发表于 2012-5-30 16:46
谢谢你了还不行吗,

好吧,我并无恶意~~~
你把字符串传进去相当于Computer c = new String("new Computer()");
这两个类既没有继承关系也没有实现关系,所以编译器通不过的

作者: 凡延海    时间: 2012-5-30 17:39
嗯,楼主把传入的实例对象加上了""双引号变成了字符串常量,因而不能通过。改过来就可以了。
  1. class ExceptionTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Teacher t = new Teacher("毕老师",new Computer());
  6.                 t.prelect();
  7.         }
  8. }
复制代码





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