java继承

继承

​ 如果多个类有多个相同的属性、方法,那么可以将这些相同的属性、方法写到一个类里面,然后其他的多个类可以使用这个类的方法及属性。

子类与父类

拥有被共用方法的类叫做父类,继承这个类的类叫做子类。

创建子类对象时,父类是相互独立的,一个对象继承父类,修改了其属性,另一个对象调用的父类不受影响,包括创建父类的对象也不受影响。

建一个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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值