Java 继承①
2026/7/22 14:30:42 网站建设 项目流程

目录

  • 1. 为什么要继承
  • 2. 继承的特点
  • 3. 子类访问父类的成员

1. 为什么要继承

classPainter{Stringname;intage;publicvoidsleep(){System.out.println(name+" sleep ");}publicvoidpaint(){System.out.println(name+" ("+age+") "+"paints");}}classDancer{Stringname;intage;publicvoidsleep(){System.out.println(name+" sleep ");}publicvoidpaint(){System.out.println(name+" ("+age+") "+"dances");}}

发现dancerpainter有很多共通的部分。

  • name
  • age
  • sleep

于是,为了代码更简洁和更易于维护,把共通的部分分离出来,用关键字extends来继承共通的部分。

classPerson{Stringname;intage;publicvoidsleep(){System.out.println(name+" sleep ");}}classPainterextendsPerson{publicvoidpaint(){System.out.println(name+" ("+age+") "+"paints");}}classDancerextendsPerson{publicvoidpaint(){System.out.println(name+" ("+age+") "+"dances");}}

这里,DancerPainter就是子类(派生类),Person就是父类(基类/超类)。

继承语法:

修饰符class子类extends父类{//.....}

这样,可以提高代码的复用率,重复代码只需要写一次

2. 继承的特点

  • 子类继承父类时,会继承父类的所有属性和方法
publicstaticvoidmain(String[]args){Painterp1=newPainter();p1.name="da Vinci";p1.age=61;p1.paint();}
  • 继承会受到访问权限关键字的限制

例如private:

classPerson{Stringname;privateintage;publicvoidsleep(){System.out.println(name+" sleep ");}}classPainterextendsPerson{publicvoidpaint(){System.out.println(name+" ("+age+") "+"paints");//编译会报错}}

private修饰的成员可以被继承,但是只能在当前类里访问。
如果要访问private修饰的成员,运用封装就可以。
private是权限限定关键字,不是继承的权限关键字。

classPerson{Stringname;privateintage;publicvoidsleep(){System.out.println(name+" sleep ");}publicvoidsetAge(intage){this.age=age;}publicintgetAge(){returnthis.age;}}classPainterextendsPerson{publicvoidpaint(){System.out.println(name+" ("+getAge()+") "+"paints");}}publicstaticvoidmain(String[]args){Painterp1=newPainter();p1.name="da Vinci";p1.setAge(61);p1.paint();}

3. 子类访问父类的成员

在子类方法中或者通过子类对象访问成员变量时:

  • 如果访问的成员变量子类中有,优先访问自己的成员变量。
  • 如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。
  • 如果访问的成员变量与父类中成员变量同名,则优先访问子类的(除super)。
  • 成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。
classF{inta=10;}classSextendsF{inta=15;publicvoidprint(){System.out.println(a);}}publicstaticvoidmain(String[]args){Ss=newS();s.print();}

在子类方法中或者通过子类对象访问成员方法时:

  • 访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则
    访问,否则编译报错。
  • 访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用
    方法时传递的参数选择合适的方法访问,如果没有则报错;(除重写)
classF{publicvoidprint(){System.out.println("F:print");}}classSextendsF{publicvoidprint(inta){System.out.println("S:print");}}publicclassTest{publicstaticvoidmain(String[]args){Ss=newS();s.print(10);s.print();}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询