二、Java初级--9、构造函数
2018-03-12 本文已影响0人
cybeyond
构造函数(constructor):一种特殊的函数,用于初始化对象,在创建对象的时候会被自动调用
默认构造函数:是指没有参数的构造函数,当我们不编写构造函数的时候,系统会自动生成默认构造函数。
注: 1、构造函数必须与类名相同,且不能有返回值,但不能加void
2、构造函数可以有多个,多个构造函数参数不能相同
3、当我们编写了有参数的构造函数后,系统不会生成默认构造函数
package javastudy;
public class Person {
private String name;
private int height;
public Person() { //构造无参数构造函数
this.name="";
this.height=0;
}
public Person(String name,int height){ //构造函数必须与类名相同,且不能有返回值,但不能加void
this.name=name;
this.height=height;
}
//getter
public String getName()
{
return name;
}
public int getHeight()
{
return height;
}
public void show()
{
System.out.println("姓名:"+name+"身高:"+height);
}
}
package javastudy;
public class testit {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person z=new Person("zhang",170);
z.show(); //通过z.name和z.height不能引用,因为是private
Person x=new Person(); //无参引用时,需要在Person中构造无参构造函数
x.show();
}
}
执行结果
下面的例子,新建Student类,Person类保持不变:
结构
package javastudy;
public class testit {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person z=new Person("zhang",175);
z.show();
Person x=new Person();
x.show();
Student s=new Student();
s.show();
}
}
package javastudy;
public class Student extends Person {
private int score;
public Student(){
score=70;
}
public void show() {
System.out.println("你的名字是:" +getName()+ "身高是:" +getHeight()+ "得分:" +score);
}
}
执行结果
上述引用的是默认构造函数,其实调用父类的null和0,如果想要将其设置为一定值,可以使用super
package javastudy;
public class Student extends Person {
private int score;
public Student(){
super("hello",190);
score=70;
}
public void show() {
System.out.println("你的名字是:" +getName()+ "身高是:" +getHeight()+ "得分:" +score); //score可以在testit中直接获得,但是不能被引用,如在testit中给对象重新赋值,因为是private;而继承的name和height需要使用getter才能获得,因为private继承后不能直接拿来使用
}
}
使用构造函数带参数:
package javastudy;
public class Student extends Person {
private int score;
public Student(){
super("hello",190);
score=70;
}
public Student(String name,int height,int score){
super(name,height);
this.score=score;
}
public void show(){
System.out.println("你的名字是:" +getName()+ "身高是:" +getHeight()+ "得分:"+score);
}
}
package javastudy;
public class testit {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person z=new Person("zhang",170);
// z.show();
// Person s=new Person();
// s.show();
Student x=new Student();
x.show();
Student t=new Student("wang",175,70);
t.show();
}
}
执行结果