构造方法浅析

1  无参构造与有参构造

先让我们了解一下有参构造方法和无参构造方法,见名思意,有参构造就是有参数传递,无参构造就是没有参数传递。

参考代码如下:

 1 class People{//定义一个人类
 2     String name;//姓名
 3     char gender;//性别
 4     int date;//出生日期
 5     People(){//定义无参构造方法
 6         System.out.println("这是无参构造函数,张三出生了");//输出提示
 7         this.name="张三";//在无参构造中初始化属性
 8         this.gender='男';//在无参构造中初始化属性
 9         this.date=19940216;//在无参构造中初始化属性
10     }
11     People(String name,char gender,int date){//定义有参构造方法
12         System.out.println("这是有参构造函数,"+name+"出生了");//输出提示
13         this.name=name;//在有参构造方法中将形参传给实参
14         this.gender=gender;//在有参构造方法中将形参传给实参
15         this.date=date;//在有参构造方法中将形参传给实参
16     }
17 }

从以上代码可以看出,在创建具体对象时,无参构造方法的初始化在代码中固定,当然,可以不要这段代码,在创建对象时根据“类名.属性”定义,但是较为麻烦,这也是有参构造函数的最大优势之一。

2  子类构造函数常见问题分析

接下来我们依据上面的People类来创建一个Student子类,参考代码如下:

 1 class Student extends People{//定义一个学生类,继承人类
 2     int xuehao;//再定义一个新的属性,学号
 3     Student(String name,char gender,int date,int xuehao){//定义有参构造方法
 4         System.out.println("这是有参构造函数,继承了People类,学生"+name+"来学校了");//输出提示
 5         this.name=name;//在有参构造方法中将形参传给实参
 6         this.gender=gender;//在有参构造方法中将形参传给实参
 7         this.date=date;//在有参构造方法中将形参传给实参
 8         this.xuehao=xuehao;//在有参构造方法中将形参传给实参
 9     }
10 }

【注意】在创建子类时,可能会因为子类的构造函数而出现编译不通过的情况。

比如:

1 Student student=new Student();

若要创建一个子类的对象,则要调用子类构造函数。在子类构造函数(无参、有参)的第一行默认调用父类无参构造函数,若父类中没有无参构造函数,子类必须显示调用父类的有参构造函数(super)。

解决方法:

  1. 在父类中,加入无参构造函数
  2. 移除自定义的构造函数
  3. 子类的构造函数第一行中加入super(value)

【注】可以使用“super.属性”或“super.方法”调用父类的属性或方法。

至于super方法怎么用,接着看以下代码:

 1 class People{
 2     String name;
 3     //People(){};//无参构造
 4     People(String name){//有参构造
 5         this.name=name;
 6     }
 7 }
 8 class Student extends People{
 9     int xuehao;
10     Student(String name,int xuehao){
11         super(name);//调用父类有参构造
12         this.xuehao=xuehao;
13     }
14 }

看明白了吗?应该是明白了。

3    创建类对象数组

接下来我们来谈一谈创建对象的问题,有时候我们需要使用一个类的多个对象,比如说学生类,如果一个接一个的创建学生类,不是不可取,只是很麻烦,较占空间,最为关键的是以后若想增加或删除某个对象时很麻烦,特别是在写一个学生成绩管理系统之类的时候,无路可走。故我们要用另一种方法创建一个类对象:数组对象。这种方法常与有参构造相结合使用,因为初始化的时候很方便!

参考代码如下:

 1 Student S[] = new Student[50];//定义一个Student数组对象,可以存储50位同学的信息
 2 S[0]=new Student("张一","男",96,67,85,8000);//初始化第一位学生
 3 S[1]=new Student("张二","女",46,56,84,8001);//初始化第二位学生
 4 S[2]=new Student("张三","男",58,61,86,8002);//初始化第三位学生
 5 S[3]=new Student("张四","女",84,67,23,8003);//初始化第四位学生
 6 S[4]=new Student("张五","男",65,94,56,8004);//初始化第五位学生
 7 S[5]=new Student("张六","女",43,75,98,8005);//初始化第六位学生
 8 S[6]=new Student("张七","女",67,45,78,8006);//初始化第七位学生
 9 S[7]=new Student("张八","男",82,65,94,8007);//初始化第八位学生
10 S[8]=new Student("张九","女",91,23,28,8008);//初始化第九位学生
11 S[9]=new Student("张十","男",98,84,64,8009);//初始化第十位学生

使用这种定义,在新增学生信息的时候,只需要控制数组的下标即可,非常方便!

多嘴一句,double也是一个类对象,如下:

1 double a[]=new double[100];//创建一个double类数组
原文地址:https://www.cnblogs.com/qijunhui/p/8284300.html