继承
如果多个类有多个相同的属性、方法,那么可以将这些相同的属性、方法写到一个类里面,然后其他的多个类可以使用这个类的方法及属性。
子类与父类
拥有被共用方法的类叫做父类,继承这个类的类叫做子类。
创建子类对象时,父类是相互独立的,一个对象继承父类,修改了其属性,另一个对象调用的父类不受影响,包括创建父类的对象也不受影响。
建一个Undergraduate类和Pupil类,都有名字、成绩、年龄,可以建一个类来写这些属性写一个Student类
class Student {
public String name;
public int age;
public double score;
public student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
public void info(){
System.out.println("姓名" + name + " 年龄" + age + " 得分" + score);
}
}
在同一个包下建一个Undergraduate类和Pupil类,继承Student类。
语法 :class
子类名 extends
父类名
class Undergraduate extends Student{
}
class Pupil extends Student {
}
super 关键字
调用父类的构造器,使用super传参。
super()与this()必须放在构造器的第一行,因此不能同时用
子类中必须要用super调用父类的构造器
子类需要传递参数,完善之前的两个子类
class Undergraduate extends Student{
public Undergraduate(String name, int age, double score) {
super(name, age, score);
}
}
class Pupil extends Student {
public Pupil(String name, int age, double score) {
super(name, age, score);
}
}
子类可以有自己特有的方法、属性,在里面添加testing方法
public class Undergraduate extends student {
public Undergraduate(String name, int age, double score) {
super(name, age, score);
}
public void testing(){
System.out.println(name + "正在考高等数学");
}
}
class Pupil extends Student {
public Pupil(String name, int age, double score) {
super(name, age, score);
}
public void testing(){
System.out.println(name + "正在考小学数学");
}
}
在main方法调用测试
public class Main{
public static void main(String[] args) {
Undergraduate jack = new Undergraduate("jack", 20, 80);
jack.testing();
jack.info();//调用父类的info方法
Pupil tom = new Pupil("tom", 10, 95);
tom.testing();
tom.info();
}
}
输出
jack正在考高等数学
姓名jack 年龄20 得分80
tom正在考小学数学
姓名tom 年龄10 得分95
细节
子类无参构造器中默认有super()
看看下面代码会输出什么?
public class test {
public static void main(String[] args) {
B b = new B();
}
}
class A {
A(){
System.out.println("a");
}
}
class B extends A{
B() {
System.out.println("b");
}
}
子类先调用父类,完成对父类的初始化
执行到super时,先执行父类构造器中的内容,再回到子类执行super下面的内容
输出
a
b
可以看到,新建一个对象,先调用父类的构造器,再调用子类的构造器
java所有类都是Object类的子类,Object是所有类的基类
父类构造器的调用不限于直接父类,将一直往上追溯到Object类(顶级父类)
java是单继承机制,子类最多只能继承一个父类(指直接继承)
如何让A类继承B类和C类?
——A继承B,B继承C