二、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();
    }
}
执行结果
上一篇下一篇

猜你喜欢

热点阅读