面向对象3大特征------继承之一---构造器

继承的简介

是面向对象最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力

已有的类,叫==父类==,又叫基类,超类。 派生出来的新类,叫==子类==,也叫派生类。 使用关键字extends 来表示子类继承了父类。

class A{}
class B extends A{}
class C extends A{}

继承特点

1、Java只支持单继承,即一个类只能有一个父类;但是一个类可以有多个子类。

2 、java支持多重继承,即一个类在继承自一个父类的同时,还可以被其他类继承。 可见继承具有传递性

3、子类继承了父类的所有成员变量和方法,包括私有的(只不过没有访问权限),当然也包括静态成员。

4、子类不会继承父类的构造方法,只能调用父类里的构造方法,并且一定至少有一个子类构造器调用了父类的构造器。

5 、子类在拥有父类的成员的基础上,还可以添加新成员。

继承中的构造器

一个对象在实例化的时候,需要在堆上开辟空间,堆中的空间分为两部分,分别是从父类继承到的属性,子类特有的属性。而实例化父类部分的时候,需要调用父类中的构造方法。

值得注意的是,默认调用的是父类中的无参构造器。如果父类中没有无参构造器,那么子类需要显式调用父类中的某一个有参构造器。子类继承过来的属性需要初始化

在子类的构造方法中,使用==super(有参传参)==调用父类中存在的构造方法,而且==super(有参传参)==必须放在首行首句的位置上。因此可知,==super(有参传参)==和==this(有参传参)==不能在一个构造器中共存

以下Person类充当父类


public class APerson {
    private String name;
    private int age;
    private char gender;

    public APerson(){}

    public APerson(String name, int age, char gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }
}
定义一个学生类型,有人的特征,可以继承过来
public class Student extends APerson{
private String studentId;
private String classNo;

public Student(String studentId,String classNo){
    super("小十八狗",1,'男');
    this.studertId = studentId;
    this.classNo = classNo;

}
public Student(String name,int age,char gender,String studentId,String classNo){
 super(name,age,gender);
        this.studentId = studentId;
        this.classNo = classNo;
}
  public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    public String getClassNo() {
        return classNo;
    }

    public void setClassNo(String classNo) {
        this.classNo = classNo;
    }
public String toString(){
        return "name:"+getName()
                +",age:"+getAge()
                +",gender:"+getGender()
                +",studentId:"+studentId
                +",classNo:"+classNo;
    }
}

}

构造器的测试

public class StudentTest {
    public static void main(String[] args) {
        //调用子类的五个参数的构造器
        Student xiaoming =
                new Student("小明",18,'男',"A20240001","C1001");
        System.out.println(xiaoming);

        //调用子类的两个参数的构造器
        Student xiaohei = new Student("A20240002","C1001");
        System.out.println(xiaohei);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值