首先是例子
package pack;
class person{
 private String name;
 
 private int age;
 public void person(){
  System.out.println("调用了个人类的构造方法");
  
 }
 public  void SetNameAge(String name,int age){
  this.name=name;
  this.age=age;
 }
 public void show(){
  System.out.println("姓名:"+name+"年龄:"+age);
 }
}
class student extends person{
 private String department;
 public void  student(){
  System.out.println("调用了学生类的构造方法");
 }
 public void SetDepartment(String dep){
  department=dep;
 System.out.println("我是"+dep+"的学生");
 }
}
 public class Text{
  public static void main(String[]args){
   student stu=new student();
   stu.person();
   stu.student();
   //stu.SetDepartment("a");
   //stu.SetNameAge("张小三", 21);
   //stu.show();
   //stu.SetDepartment("计算机系");
   
  }
 }
 
输出结果 调用了个人类的构造方法
         调用了学生类的构造方法
如果我吧person方法和student方法前的void去掉,为什么不用调用方法,直接实列化对象就能输出结果呢?如下
package pack;
class person{
 private String name;
 
 private int age;
 public  person(){
  System.out.println("调用了个人类的构造方法");
  
 }
 public  void SetNameAge(String name,int age){
  this.name=name;
  this.age=age;
 }
 public void show(){
  System.out.println("姓名:"+name+"年龄:"+age);
 }
}
class student extends person{
 private String department;
 public  student(){
  System.out.println("调用了学生类的构造方法");
 }
 public void SetDepartment(String dep){
  department=dep;
 System.out.println("我是"+dep+"的学生");
 }
}
 public class Text{
  public static void main(String[]args){
   student stu=new student();
   //stu.person();
   //stu.student();
   //stu.SetDepartment("a");
   //stu.SetNameAge("张小三", 21);
   //stu.show();
   //stu.SetDepartment("计算机系");
   
  }
 }
 

解决方案 »

  1.   

    如果加了void,就是类的方法,如果不加void,那就是构造方法。 构造方法有要求,必须与类名相同。 在你这个例子中,你可以把 public void person() 与 public person() 都加上的。 但是你不可以把 public void show() 与 public show() 都加上。 因为类名是 person,而不是show。
    构造方法的特点是,当类被实例化时会自动执行。
      

  2.   

    额  person 类名最好大写  [public] Person(){}//构造器
      public person(){} // 会报错
      public void person(){} // 普通方法
      

  3.   

    这个例子不是很正规,一般类名的首字母是要大写的
    构造函数的格式是有规范的:函数名和类名一样,访问修饰符可以是public,也可以是private,没有返回类型,可以有参数。
    如果函数符合这个要求,那就是构造函数,否则是普通函数。
    不带参数的构造函数是默认构造函数,你可以自己声明一个,也可以不声明,系统隐含有这样的构造函数。
    默认构造函数在类被装载的时候自动调用。
    当把public void person()的void去掉后,它就成了构造函数,由于没有参数,它就成了默认构造函数,所以new person的时候就自动执行了