网站是怎么做的吗,深圳做网站de公司,最近三天的新闻大事国内,wordpress prefix文章目录 #x1f4d1;前言一、继承1.1 继承关系的代码块1.2 protected关键字1.3 继承方式1.4 final关键字1.5 继承与组合 #x1f324;️全篇总结 #x1f4d1;前言 在面向对象编程中#xff0c;继承是一种重要的概念#xff0c;它允许我们创建一个新类#xff0c;从现有… 文章目录 前言一、继承1.1 继承关系的代码块1.2 protected关键字1.3 继承方式1.4 final关键字1.5 继承与组合 ️全篇总结 前言 在面向对象编程中继承是一种重要的概念它允许我们创建一个新类从现有的类中继承属性和方法。通过继承我们可以实现代码的重用和扩展构建更加灵活和可维护的代码结构。本文将深入探讨继承关系中的代码块执行顺序、protected关键字的应用、继承方式的限制以及final关键字的作用帮助您更好地理解和应用继承在Java中的特性和规则。 一、继承
1.1 继承关系的代码块
在没有继承关系的时候
静态代码块先执行并且只执行一次在类加载阶段执行当有对象创建时才会执行实例代码块实例代码块执行完成后最后构造方法执行
有继承关系时
父类静态代码块优先于子类静态代码块执行且是最早执行父类实例代码块和父类构造方法紧接着执行子类的实例代码块和子类构造方法紧接着再执行第二次实例化子类对象时父类和子类的静态代码块都将不会再执行
1.2 protected关键字
// extend01包中
public class B {private int a;protected int b;public int c;int d;
} // extend01包中
// 同一个包中的子类
public class D extends B{public void method(){
// super.a 10; // 编译报错父类private成员在相同包子类中不可见super.b 20; // 父类中protected成员在相同包子类中可以直接访问super.c 30; // 父类中public成员在相同包子类中可以直接访问super.d 40; // 父类中默认访问权限修饰的成员在相同包子类中可以直接访问}
} // extend02包中
// 不同包中的子类
public class C extends B {public void method(){
// super.a 10; // 编译报错父类中private成员在不同包子类中不可见super.b 20; // 父类中protected修饰的成员在不同包子类中可以直接访问super.c 30; // 父类中public修饰的成员在不同包子类中可以直接访问
//super.d 40; // 父类中默认访问权限修饰的成员在不同包子类中不能直接访问}
} // extend02包中
// 不同包中的类
public class TestC {public static void main(String[] args) {C c new C();c.method();
// System.out.println(c.a); // 编译报错父类中private成员在不同包其他类中不可见
// System.out.println(c.b); // 父类中protected成员在不同包其他类中不能直接访问System.out.println(c.c); // 父类中public成员在不同包其他类中可以直接访问
// System.out.println(c.d); // 父类中默认访问权限修饰的成员在不同包其他类中不能直接访问}
} 父类中private成员变量虽然在子类中不能直接访问但是也继承到子类中了。
一般来说希望类要尽量做到 “封装”, 即隐藏内部实现细节, 只暴露出必要的信息给类的调用者因此我们在使用的时候应该尽可能的使用 比较严格的访问权限例如如果一个方法能用 private, 就尽量不要用 public。
简单粗暴的做法: 将所有的字段设为 private, 将所有的方法设为 public。但是这种方式属于是
对访问权限的滥用。 写代码的时候还是要认真思考, 该类提供的字段方法到底给 “谁” 使用(是类内部自己用, 还是类的调用者使用, 还是子类使用
1.3 继承方式 Java中不支持多继承
我们写的类是现实事物的抽象一般来说真正在公司中所遇到的项目往往业务比较复杂, 可能会涉及到一系列复杂的概念都需要我们使用代码来表示, 所以我们真实项目中所写的类也会有很多类之间的关系也会更加复杂但是即使如此, 并不希望类之间的继承层次太复杂. 一般不希望出现超过三层的继承关系如果继承层次太多就需要考虑对代码进行重构了如果想从语法上进行限制继承, 就可以使用 final 关键字。
1.4 final关键字
final关键可以用来修饰变量、成员方法以及类
修饰变量或字段表示常量(即不能修改)修饰类表示此类不能被继承修饰方法表示该方法不能被重写
1.5 继承与组合
和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果。组合并没有涉及到特殊的语法(诸如 extends 这样的关键字)仅仅是将一个类的实例作为另外一个类的字段。
继承表示对象之间是is-a的关系比如狗是动物猫是动物
组合表示对象之间是has-a的关系比如汽车汽车和其轮胎、发动机、方向盘、车载系统等的关系就应该是组合因为汽车是有这些部件组成的
组合是一种将多个类组合成一个更大的类的方式。在组合关系中一个类容器类包含另一个类成员类的实例作为它的成员变量。通过组合容器类可以使用成员类的属性和方法并且可以对成员类进行更多的封装和控制。组合使用成员变量来实现。
class Engine {void start() {System.out.println(Engine is starting);}
}class Car {private Engine engine;Car() {engine new Engine();}void start() {engine.start();System.out.println(Car is starting);}
}public class Main {public static void main(String[] args) {Car car new Car();car.start(); // 输出Engine is startingCar is starting}
}️全篇总结
通过了解了在Java中继承关系中代码块的执行顺序、protected关键字的使用方法、继承方式的限制以及final关键字的作用。掌握这些知识将有助于您设计出更加清晰、灵活和易于维护的类结构提高代码的可读性和可扩展性。