2026/1/20 14:46:43
网站建设
项目流程
现在门户网站建设还有人弄吗,会员卡管理系统设计,企业如何建设免费网站,360度全景网站的公司先赞后看#xff0c;养成习惯#xff01;#xff01;#xff01; ^ _ ^ ❤️ ❤️ ❤️ 码字不易#xff0c;大家的支持就是我坚持下去的动力#xff0c;点赞后不要忘记关注我哦 个人主页#xff1a;伯明翰java 文章专栏#xff1a;JavaSE 如有错误#xff0c;请您指…先赞后看养成习惯 ^ _ ^ ❤️ ❤️ ❤️码字不易大家的支持就是我坚持下去的动力点赞后不要忘记关注我哦个人主页伯明翰java文章专栏JavaSE如有错误请您指正批评 ^ _ ^1. 继承1.1 为什么需要继承Java中将现实中具体的东西抽象成类类经过实例化之后的产物对象则可以⽤来表⽰现实中的实体。但现实中物与物之间存在一定的关联那么设计程序过程中就要考虑类与类之间是否存在一定的联系⽐如狗和猫它们都是⼀个动物。使⽤Java语⾔来进⾏描述就会设计出这样的代码// Dog.javapublicclassDog{Stringname;intage;floatweight;publicvoideat(){System.out.println(name正在吃饭);}publicvoidsleep(){System.out.println(name正在睡觉);}voidBark(){System.out.println(name汪汪汪~~~);}}// Cat.JavapublicclassCat{Stringname;intage;floatweight;publicvoideat(){System.out.println(name正在吃饭);}publicvoidsleep(){System.out.println(name正在睡觉);}voidmew(){System.out.println(name喵喵喵~~~);}}通过上述代码来看猫与狗的类存在大量的代码重复那能否将这些共性抽取呢⾯向对象思想中提出了继承的概念专⻔⽤来进⾏共性抽取实现代码复⽤。1.2 继承概念继承是Java中一种使得子类可以自动共享父类数据结构和方法的机制是代码复用的重要手段它允许程序员在原有类的基础上进行扩展。继承主要解决的问题是共性抽取实现代码复用1.3继承的语法在Java中如果要表⽰类之间的继承关系需要借助extends关键字修饰符class⼦类extends⽗类{// ...}// Animal.javapublicclassAnimal{Stringname;intage;publicvoideat(){System.out.println(name正在吃饭);}publicvoidsleep(){System.out.println(name正在睡觉);}}// Dog.javapublicclassDogextendsAnimal{voidbark(){System.out.println(name汪汪汪~~~);}}// Cat.JavapublicclassCatextendsAnimal{voidmew(){System.out.println(name喵喵喵~~~);}}// TestExtend.javapublicclassTestExtend{publicstaticvoidmain(String[]args){DogdognewDog();// dog类中并没有定义任何成员变量name和age属性肯定是从⽗类Animal中继承下来的System.out.println(dog.name);System.out.println(dog.age);// dog访问的eat()和sleep()⽅法也是从Animal中继承下来的dog.eat();dog.sleep();dog.bark();}}从上述代码我们可以看到Dog类和Cat类的部分代码重复使⽤了Animal中的代码。1.4成员访问在⼦类⽅法中或者通过⼦类对象访问成员时如果访问的成员变量⼦类中有优先访问⾃⼰的成员变量。如果访问的成员变量⼦类中⽆则访问⽗类继承下来的如果⽗类也没有定义则编译报错。如果访问的成员变量与⽗类中成员变量同名则优先访问⾃⼰的。成员变量访问遵循就近原则⾃⼰有优先⾃⼰的如果没有则向⽗类中找⼦类中访问⽗类的成员⽅法成员⽅法没有同名时在⼦类⽅法中或者通过⼦类对象访问⽅法时则优先访问⾃⼰的⾃⼰没有时再到⽗类中找如果⽗类中也没有则报错。通过派⽣类对象访问⽗类与⼦类同名⽅法时如果⽗类和⼦类同名⽅法的参数列表不同(重载)根据调⽤⽅法适传递的参数选择合适的⽅法访问如果没有则报错1.5 super关键字在一定场景下⼦类和⽗类中可能会存在相同名称的成员如果要在⼦类⽅法中访问⽗类同名成员时该如何操作直接访问是⽆法做到的Java提供了super关键字该关键字主要作⽤在⼦类⽅法中访问⽗类的成员publicclassBase{inta;intb;publicvoidmethodA(){System.out.println(Base中的methodA());}publicvoidmethodB(){System.out.println(Base中的methodB());}}publicclassDerivedextendsBase{inta;// 与⽗类中成员变量同名且类型相同// 与⽗类中methodA()构成重载publicvoidmethodA(inta){System.out.println(Derived中的method()⽅法);}// 与基类中methodB()构成重写(即原型⼀致重写后序详细介绍)publicvoidmethodB(){System.out.println(Derived中的methodB()⽅法);}publicvoidmethodC(){// 对于同名的成员变量直接访问时访问的都是⼦类的a100;// 等价于 this.a 100;b101;// 等价于 this.b 101;// 注意this是当前对象的引⽤// 访问⽗类的成员变量时需要借助super关键字// super是获取到⼦类对象中从基类继承下来的部分super.a200;super.b201;// ⽗类和⼦类中构成重载的⽅法直接可以通过参数列表区分访问⽗类还是⼦类⽅法methodA();// 没有传参访问⽗类中的methodA()methodA(20);// 传递int参数访问⼦类中的methodA(int)// 如果在⼦类中要访问重写的基类⽅法则需要借助super关键字methodB();// 直接访问则永远访问到的都是⼦类中的methodA()基类的⽆法访问到super.methodB();// 访问基类的methodB()}}注子类不能访问父类用final修饰的方法、静态方法和private修饰的方法