Java 继承③

📅 2026/7/24 12:58:29
Java 继承③
目录1. 初始化2. 关键字protected3. 继承方式4. 关键字 final 修饰类5. 组合和继承1. 初始化当静态代码块、实例代码块和构造方法都出现在子类和父类代码的初始化顺序是什么样的classPerson{Stringname;intage;publicPerson(Stringname,intage){this.namename;this.ageage;System.out.println(Person(String ,int));}static{System.out.println(Person:static{});}{System.out.println(Person:{});}}classPainterextendsPerson{booleanblindness;publicPainter(booleanblindness,Stringname,intage){super(name,age);this.blindnessblindness;System.out.println(Painter(boolean ,String ,int));}static{System.out.println(Painter:static{});}{System.out.println(Painter:{});}}publicclassTest{publicstaticvoidmain(String[]args){PainterpnewPainter(true,da vinci,61);}}由于三者之间的顺序是 静态代码块 实例代码块 构造方法①父类和子类和静态代码块先执行 — ②父类实例代码块和构造方法 — ③ 子类实例代码块和构造方法注意点静态代码块最先被执行且只执行一次。实例代码块和构造方法调用几次执行几次publicstaticvoidmain(String[]args){Painterp1newPainter(true,da vinci,61);System.out.println();Painterp2newPainter(false,NPC,20);}2. 关键字protected限定访问符同一类同一个包不同包子类不同包非子类protected✅✅✅❌不同包子类在包demopackageDemo;publicclassTest1{protectedintage10;}在包demo2:packageDemo2;importDemo.Test1;publicclassTest2extendsTest1{publicvoidprint(){System.out.println(super.age);}publicstaticvoidmain(String[]args){Test2testnewTest2();test.print();}}test.print();输出结果3. 继承方式Error❌:classA{}classB{}classCextendsA,B{}⚠️java不支持一个子类继承多个父类。目录1. 初始化2. 关键字protected3. 继承方式4. 关键字 final 修饰类5. 组合和继承4. 关键字 final 修饰类final修饰类 表示被修饰类不可被继承。Error ❌:finalclassPerson{}classStudentextendsPerson{}5. 组合和继承继承表示is - a是一个的关系classPerson{}classStudentextendsPerson{}Student是Person。组合表示has - a有一个的关系classEngine{publicvoidstart(){System.out.println(发动机启动);}}classCar{EngineenginenewEngine();publicvoidrun(){engine.start();System.out.println(汽车行驶);}}publicclassTest{publicstaticvoidmain(String[]args){CarcarnewCar();car.run();}}Car有engine继承组合关系is-ahas-a关键字extends成员变量耦合高低灵活性较低较高