黑马程序员技术交流社区

标题: 怎么学着学着晕乎了~~~求解答关于重载构造函数问题 [打印本页]

作者: 李晓旭    时间: 2012-3-16 23:55
标题: 怎么学着学着晕乎了~~~求解答关于重载构造函数问题

  1. /*如果用这个空白的就可以编译通过,为什么
  2. class Person {
  3.    
  4. }
  5. */
  6. class Person //extends Object 加了继承也不行
  7. {
  8.         //public void Person(){}  //加了Person()构造函数还是不行
  9.         public void Person(int a)
  10.         {
  11.                
  12.                 System.out.println("!!!");
  13.         }
  14. }

  15. class Demo
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 Person p  = new Person(5);
  20.                
  21.                 sop(p);
  22.                
  23.         }
  24.        
  25.        
  26.         public static void sop(Object obj)
  27.         {
  28.                 System.out.println(obj);
  29.         }
  30. }

复制代码
demo.java:17: 错误: 无法将类 Person中的构造器 Person应用到给定类型;
                Person p  = new Person(5);
                            ^
  需要: 没有参数
  找到: int
  原因: 实际参数列表和形式参数列表长度不同

为什么我重载了构造函数,但是不能创建对象了呢?
个人认为关于构造函数我应该已经理解了,但是竟然想不通。。。。这是为什么:'(
作者: 李创    时间: 2012-3-17 00:05
class Person //extends Object 加了继承也不行

{

       //public void Person(){}  //加了Person()构造函数还是不行

      //  public void  Person(int a)
        public  Person(int a)//构造函数不用加类型
        {

               

               System.out.println("!!!");

      }

}
作者: 黑马肖凯骏    时间: 2012-3-17 00:07
你去掉void 就正常了。

默认的构造方法是没有返回类型void修饰的   你加了void和原本没有的Person(){}  这样做是冲突的,当然就报错误了!
作者: 李飞    时间: 2012-3-17 00:15
构造函数没有返回值,也不能用void修饰,只能用public private等修饰

你这其实就不是构造函数,把构造函数的void去掉就是的了
作者: 李晓旭    时间: 2012-3-17 00:28
{:soso_e153:}崩溃了,哈哈,完全把这个给忽略掉......
作者: 阿牛    时间: 2012-3-17 23:21
学习了。
作者: 魏群    时间: 2012-3-17 23:35
构造函数的语法错误。无需加void修饰符,加了就变成普通方法了。
作者: 朱亚安    时间: 2012-3-18 01:50
  首先你这个问题就是构造方法的书写的问题,构造方法不能有返回值的,所有void去掉就OK了。
  如你代码,机上void后这个方法就不是构造方法了,只是一个普通的方法,那么该类中就只有一个空构造了。在main中new对象的时候其实是调用的空构造方法,因此运行的时候会说你的参数个数不对,空构造中就没有构造方法而你传了一个5这样的话是肯定错的。要避免呀~~~

  

作者: 薛波    时间: 2012-3-18 09:20
public class Person {
        public Person(int i) {

        }

        public void Person(int a)//这种写法叫定义方法而不叫重载构造方法,构造方法是没有返回值的所以重载构造方法以。
    {
               System.out.println("!!!");
    }
}
class Demo
{
       public static void main(String[] args)

       {
               Person p  = new Person(5);
               sop(p);
       }

       public static void sop(Object obj)

       {

               System.out.println(obj);

       }

}

构造方法是一种特殊的方法,它的名字必须与它所在类的名字完全相同,并且没有返回值,也不需要使用关键字void进行标识。构造方法用于对对象中的所有成员变量进行初始化,在创建对象时立即被调用。需要注意的是:如果用户没有定义构造方法,Java会自动提供一个默认的构造方法,用来实现成员变量的初始化。





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