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()方法。