首先是例子
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("计算机系");
}
}
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("计算机系");
}
}
构造方法的特点是,当类被实例化时会自动执行。
public person(){} // 会报错
public void person(){} // 普通方法
构造函数的格式是有规范的:函数名和类名一样,访问修饰符可以是public,也可以是private,没有返回类型,可以有参数。
如果函数符合这个要求,那就是构造函数,否则是普通函数。
不带参数的构造函数是默认构造函数,你可以自己声明一个,也可以不声明,系统隐含有这样的构造函数。
默认构造函数在类被装载的时候自动调用。
当把public void person()的void去掉后,它就成了构造函数,由于没有参数,它就成了默认构造函数,所以new person的时候就自动执行了