《在 Java 星河中探寻继承之光》继承一.什么是继承?二.继承的定义语法2.12.2继承的语法extends三.子类中访问父类成员3.1supper访问成员变量3.2supper访问成员方法3.3supper调用构造方法this,super四.protected五.final关键字六.继承与组合继承一.什么是继承?继承这个概念很好理解,我们在生活中也有继承,例如,儿子继承了父亲的遗产,那么JAVA的继承有啥不一样?二.继承的定义语法2.1Cat类publicclassCat{Stringname;intage;publicvoidmiao(){System.out.println(this.name正在喵喵叫......);}publicCat(Stringname,intage){this.namename;this.ageage;}}Dog类publicclassDog{Stringname;intage;publicvoidbark(){System.out.println(this.name正在汪汪叫......);}publicDog(Stringname,intage){this.namename;this.ageage;}}可以看到,这两个类是有共同属性的,那么能不能单独拿出来,形成共用?我们可以用到继承publicclassAnimal{publicStringname;publicintage;}这是要被继承的,我们称为父类/超类,基类继承的称为子类/派生类2.2继承的语法extends需要用到extends关键字,它本身就有继承意思publicclass子类extends父类publicclassCatextendsAnimal{publicvoidmiao(){System.out.println(this.name正在喵喵叫......);}publicCat(Stringname,intage){this.namename;this.ageage;}}三.子类中访问父类成员这是我们需要用到 supper关键字;publicclassA{publicinta1;publicintb2;}publicclassBextendsA{publicintc3;publicinta111;publicB(){System.out.println(a);System.out.println(this.a);}}publicclasstest{publicstaticvoidmain(String[]args){BbnewB();}}可以看到,这里访问的是子类的3.1supper访问成员变量publicclassBextendsA{publicintc3;publicinta111;publicB(){System.out.println(a);System.out.println(this.a);System.out.println(super.a);}}当子类与父类有相同的成员变量,优先访问子类的成员变量要想访问父类要用super3.2supper访问成员方法publicclassA{publicinta1;publicintb2;publicvoidFunc(){System.out.println(这是一个父类方法);}}publicclassBextendsA{publicintc3;publicinta111;publicB(){System.out.println(a);System.out.println(this.a);System.out.println(这是父类的a:super.a);System.out.println();Func();super.Func();}publicvoidFunc(){System.out.println(这是一个子类方法);}}当子类与父类有相同的成员方法,优先访问子类的成员变量,要想访问父类要用super3.3supper调用构造方法①这里要注意:当子类没有写构造方法的时候,编译器会默认有一个无参构造方法,在其中要想正确运行子类的构造方法,就必须先执行父类的构造方法public父类(){}public子类(){supper();//调用父类构造方法}②这里如果自己写了构造方法,哪怕子类重新写一个无参的构造方法,编译器也不会给你写,只能自己写一个无参的父类构造方法,自己用supper调用这里本身自己写了个构造方法,编译器不会在给他默认的,必须自己在写两个方法publicclassA{publicinta1;publicintb2;publicvoidFunc(){System.out.println(这是一个父类方法);}publicA(){}publicA(inta,intb){this.aa;this.bb;}}publicclassBextendsA{publicintc3;publicinta111;publicB(){super();System.out.println(a);System.out.println(this.a);System.out.println(这是父类的a:super.a);System.out.println();Func();super.Func();}publicvoidFunc(){System.out.println(这是一个子类方法);}publicB(inta,intb,intc,inta1){super(a,b);this.cc;this.aa1;}}this,super四.protected这个关键字现在可以用到了------同一个包同一个类,同一个包的不同类,不同包的子类注意:类的访问权限就只有两个:public , default(什么都不加,默认值)就是类的修饰限定符只有这两个修饰,注意是类!类!类!packagebo_ke6;publicclassA{protectedinta1;protectedintb2;}packagebo_ke7;importbo_ke6.A;publicclassCextendsA{publicC(){System.out.println(super.a);}}classtest{publicstaticvoidmain(String[]args){CcnewC();}}五.final关键字final的一个作用是限制继承,就是这个类如果被修饰就不能被继承publicfinalclassA{}六.继承与组合这两个概念可能有点分不清继承: is a…------是组合:a part of----一部分继承就比如:狗是一种动物,猫是一种动物;组合就比如:老师,学生是学校的一部分,车轮子是车的一部分;packagebo_ke7;publicclassStudent{}packagebo_ke7;publicclassTeacher{}packagebo_ke7;/** * 学校类 * 演示组合关系学校包含学生和老师 * 组合是一种强关联关系部分(学生、老师)不能独立于整体(学校)存在 */publicclassSchool{// 组合关系学校包含学生和老师对象privateStudentstudent;privateTeacherteacher;// 构造方法初始化组合的对象publicSchool(){studentnewStudent();teachernewTeacher();}// 获取学生对象publicStudentgetStudent(){returnstudent;}// 获取老师对象publicTeachergetTeacher(){returnteacher;}}