Java中的子类与继承

前言

大家好呀,在学习完类与对象后,我们就可以学习子类与继承了,这部分内容比较简单,但是仍然会有一些坑需要我们注意,请大家多多支持~

1.父类与子类

1.1为什么要有父类?

1.总的来说,父类的的存在目的是为了总结出子类的共性,减少我们的代码量而子类可以扩展自己的属性。就比如说我们是一个学生那么首先是基于我们是人的基础上的,因此,人具有的年龄姓名这些基本属性学生必然具有,同时,学生可以在人的基础多一些自己的属性如学号等表明自己是学生。除此之外,其他各种类型的人都有一些基本属性和与自己相关的特有属性,于是便有了父类子类的存在。

2.在我们学习了多态后可以知道,类与类之间存在父子关系是多态的基本条件,这里只作声明,不是本篇博客讨论的重点。

1.2.extends关键字

声明一个父子类需要用到extends关键字,因此,上面例子可以写成

public class People {
    String name;
    int age;//父类自己的属性
}
class Student extends People{
    String StudentNumber;
}

这里我们没在Student类中定义名字和年龄属性,但是他确实从父类中继承过来了,继承需要注意以下几点:

1.子类继承父类的全部属性,包括私有变量和私有的方法,但是,子类无法直接访问父类私有的变量和方法。

2.如果父类与子类满足重写条件,但是父类中的方法是私有的,也无法构成重写。

3.如果父类有自己的带参数的构造方法必须通过子类构造方法用super关键字调用(下面会讲到)

2.super关键字

2.1,super关键字调用隐藏的成员变量

super关键字的用法和this类似,可以调用父类与子类之间因为重名而被隐藏的父类变量和方法,比如下面这个例子

import com.sun.corba.se.impl.orb.ParserTable;

import java.sql.SQLOutput;

public class People {
    String name;
    int age;//父类自己的属性
    int a=20;
}
class Student extends People{
    String StudentNumber;
    int a=10;
    int b=a;
    int c=super.a;
    public static void main(String[] args) {
        Student student=new Student();
        System.out.println(student.a);
        System.out.println(student.c);
    }
}

这里super就指向了父类中被子类隐藏的成员变量

2.2 super关键字调用构造方法

如果父类有自己定义的带参的构造方法,那么在子类中必须用super调用,而且super代码必须放在子类构造方法第一行,如下,如果给People类提供一个带两个参数的构造方法的话,那么子类必须有一个带两个参数的构造方法并在构造方法第一行用super调用父类的构造方法,否则编译不通过,如下



public class People {
    String name;
    int age;//父类自己的属性


    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

class Student extends People {
    Student(String name, int age) {
        super(name, age);
    }
    String StudentNumber;
}

注意事项

1,以上面为例,这个子类构造方法的参数不一定只能有两个参数,如下

import com.sun.corba.se.impl.orb.ParserTable;

import java.sql.SQLOutput;

public class People {
    String name;
    int age;//父类自己的属性
    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

class Student extends People {
    Student(String name, int age,String StudentNumber) {
        super(name, age);
        this.StudentNumber=StudentNumber;
    }
    String StudentNumber;
}

2.如果父类有多个构造方法,那么子类的构造方法中只用调用其中一个即可,具体调用那个根据参数确定

3.子类每个构造方法都需要调用父类构造方法

尾声

父类与继承就讲到这里啦,我们下期见

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值