前言
大家好呀,在学习完类与对象后,我们就可以学习子类与继承了,这部分内容比较简单,但是仍然会有一些坑需要我们注意,请大家多多支持~
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.子类每个构造方法都需要调用父类构造方法
尾声
父类与继承就讲到这里啦,我们下期见