编辑代码

class Main {
	public static void main(String[] args) {
        // 面向对象编程 - 继承
        /**
        继承可以解决代码复用,让我们的编程更加靠近人类思维,
        当多个类存在相同的属性(变量和方法时,可以从这些类中抽象出父类,
        在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,
        只需要通过 extends 来声明继承父类即可。

        继承的基本语法:
        class 子类 extends 父类        
        1)子类就会自动拥有父类定义的属性和方法
        2)父类又叫 超类,基类。
        3)子类又叫派生类。
        */
        //声明一个“小学生”对象
        Pupil P1=new Pupil();
        P1.name="小明";
        P1.age=8;
        P1.getScore(98);
        P1.testing();
        P1.showInfo();
        System.out.println("====================");
        //声明一个“大学生”对象
        Graduate G1=new Graduate();
        G1.name="大强";
        G1.age=21;
        G1.getScore(135);
        G1.testing();
        G1.showInfo();
	}
}

// public class Pupil{ // 小学生
//     public String name;
//     public int age;
//     private double score;

//     public void setScore(double score){
//         this.score=score;
//     }

//     public void testing(){
//         System.out.println("小学生"+name+"\t正在考小学数学...");
//     }

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

// public class Graduate{ // 大学生
//     public String name;
//     public int age;
//     private double score;

//     public void setScore(double score){
//         this.score=score;
//     }

//     public void testing(){
//         System.out.println("大学生"+name+"正在考大学数学...");
//     }

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

// 可以看到两个类的变量信息和方法基本一样,可以用继承将复用高的代码写成父类

// 以下为改进版

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

    public void getScore(double score){
        this.score=score;
    }

    //共有方法
    public void showInfo(){
        System.out.println("学生名:"+name+"\t年龄:"+age+"\t成绩:"+score);
    }
}
// 让 Pupil 继承 Student类
class Pupil extends Student{
    public void testing(){
         System.out.println("小学生"+name+"\t正在考小学数学...");
    }
}
//让 Graduate 继承 Student类
class Graduate extends Student{
    public void testing(){
         System.out.println("大学生"+name+"\t正在考大学数学...");
    }
}