17-面向对象编程-继承

马铃薯1 / 2023-08-17 / 原文

面向对象编程有三大特征:封装、继承和多态

 

访问修饰符可以控制属性的访问范围

public:表示公共访问级别,可以被任何类访问。

protected:表示受保护访问级别,可以被类本身、子类和同一包中的类访问。

default(缺省):表示默认访问级别,即如果没有使用访问修饰符,默认是此级别,可以被同一包中的类访问。

private:表示私有访问级别,只能在类内部访问。

 

继承介绍

继承可以解决代码复用问题,当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来声明继承父类即可。

换句话说,继承就是子类继承父类的属性和方法,使得子类的对象(实例)能够使用父类的属性和方法。

继承的好处

代码的复用性提高了,同时代码的扩展性和维护性也提高了。

继承的基本语法

修饰符 class 子类 extends 父类{

}

1) 子类会自动拥有父类定义的属性和方法

2) 父类又称超类、基类,子类又称派生类

3) 不能同时继承多个类,只能继承一个类

public class Extends01 {
    public static void main(String[] args) {
        Pupil pupil = new Pupil("马铃薯1",6,100);
        pupil.testing();  //小学生正在考小学数学...
        pupil.showInfo(); //学生名:马铃薯1    年龄:6    成绩:100.0

        Graduate graduate = new Graduate("马铃薯2",26,95);
        graduate.testing();  //大学生正在考高等数学...
        graduate.showInfo(); //学生名:马铃薯2    年龄:26    成绩:95.0
    }
}

//父类
class Student{
    //共有的属性
    public String name;
    public int age;
    private double score;

    //父类构造方法
    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
        System.out.println("父类Student的构造方法");
    }

    //共有的方法
    public void setScore(double score){
        this.score = score;
    }

    public void showInfo(){
        System.out.println("学生名:" + name + "\t年龄:" + age + "\t成绩:" + score);
    }
}

//子类,小学生类
class Pupil extends Student{

    //子类构造方法
    public Pupil(String name, int age, double score) {
        super(name, age, score);
        System.out.println("子类Pupil的构造方法");
    }

    //子类特有的方法
    public void testing(){
        System.out.println("小学生正在考小学数学...");
    }

}

//子类,大学生类
class Graduate extends Student{

    //子类构造方法
    public Graduate(String name, int age, double score) {
        super(name, age, score);
        System.out.println("子类Graduate的构造方法");
    }

    //子类特有的方法
    public void testing(){
        System.out.println("大学生正在考高等数学...");
    }
}

 

继承的使用细节

1. 子类继承了父类所有的属性和方法,非私有的属性和方法

可以在子类直接访问,但是私有的属性和方法不能在子类直接访问,要用通过父类提供的公共方法进行访问,例如 getXxx()方法。