黑马程序员技术交流社区

标题: 代码疑问 [打印本页]

作者: che201311    时间: 2013-11-23 10:44
标题: 代码疑问
package test;

public class Nine2 {
        public static void main(String[] args) {
        fun(new cat());
        }
public static void fun(animal a)
{
a.jiao();        
}
}
abstract class animal
{
String name;
String call;
public abstract String jiao();
}
class cat extends animal
{
     public cat(String name,String call)
    {
        this.name=name;
        this.call=call;
    }
     public String jiao()
    {
             return this.name+this.call;
       //System.out.println(this.name+this.call);        
     }

}

class dog extends animal
{
     public dog(String name,String call)
    {
        this.name=name;
        this.call=call;
    }
     public String jiao()
    {
             return this.name+this.call;
       //System.out.println(this.name+this.call);        
     }

}

我这段代码中        fun(new cat());这句话有错误“构造函数的猫()是未定义的”那么该怎么改啊!如果这样Animal an=new Cat("猫","喵~喵!");
     System.out.println(an.talk());那么动物种类多了就显得有些麻烦了?请问该怎么改啊?
作者: 王贺    时间: 2013-11-23 11:00
因为你Cat类和Dog类都定义个有参的构造函数,所以你在用new cat()或 new dog()这样的无参时就会报错,可以在调用fun()赋参的时候这样做,比如fun(new dog("dog","汪汪")) ,其他的不用改,不知道是不是楼主要的
作者: che201311    时间: 2013-11-23 11:02
你的意思是 没有无参了?
作者: 邓伟    时间: 2013-11-23 12:31
  1. //构造函数形参
  2.                         fun(new dog("狗","汪"));
复制代码

作者: 邓伟    时间: 2013-11-23 12:32
//sorry 第一个发错了.
class Nine2 {
                public static void main(String[] args)
                {
                        fun(new cat("猫","瞄"));   //构造函数形参
                        fun(new dog("狗","汪"));//构造函数形参
       
                }
                public static void fun(animal a)
                {
                        System.out.println(a.jiao());        
                }
}
abstract class animal
{
        String name;
        String call;
        public abstract String jiao();
}

class cat extends animal
{
        public cat(String name,String call)//你把构造函数定义成有参数的了.
        {
                this.name=name;
                this.call=call;
        }
        public String jiao()
        {
                 return this.name+"叫"+this.call;
           //System.out.println(this.name+this.call);        
        }
}

class dog extends animal
{
        public dog(String name,String call)  //你把构造函数定义成有参数的了.
        {
                this.name=name;
                this.call=call;
        }
        public String jiao()
        {
                return this.name+"叫"+this.call;
          //System.out.println(this.name+this.call);        
        }

}
[/code]
作者: 花生壳    时间: 2013-11-23 13:54
王贺 发表于 2013-11-23 11:00
因为你Cat类和Dog类都定义个有参的构造函数,所以你在用new cat()或 new dog()这样的无参时就会报错,可以 ...

测试数据




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