继承是面向对象编程中实现代码重用和扩展的核心机制,通过父类与子类的关系,子类可以继承父类的属性和方法,同时通过重写或扩展实现差异化功能。以下是对继承中关键概念的详细解析及代码示例说明:
1. 父类(超类)- 定义:被其他类继承的类,提供通用属性和方法。
- 示例:Door类作为父类,定义门的基本行为(如开关)和属性(如高度、宽度)。public class Door { public int height; protected int width; public void openDoor() { System.out.println("Door is open ..."); } public void closeDoor() { System.out.println("Door is close ..."); } public void setHeight(int h) { this.height = h; } public int getHeight() { return height; }}
2. 子类- 定义:通过extends关键字继承父类,自动获得父类的非私有成员。
- 示例:SafeDoor继承Door,无需重复实现开关方法即可直接使用。public class SafeDoor extends Door { // 空实现,仅继承Door}
- 调用父类成员:子类实例可访问父类的public和protected成员(如height、width、openDoor())。
3. 重写(Override)4. 扩展(Extension)- 定义:子类新增父类不具备的方法或属性,增强功能。
- 示例:为SafeDoor添加lockDoor()方法:public class SafeDoor extends Door { public void lockDoor() { System.out.println("Door is locked ..."); }}
- 调用扩展方法:SafeDoor safeDoor = new SafeDoor();safeDoor.lockDoor(); // 输出: Door is locked ...
继承的核心优势- 代码重用:子类直接复用父类方法,避免重复编写。
- 层次化设计:通过继承关系表达“是一个”(Is-A)的逻辑(如防盗门是门)。
- 多态基础:父类引用指向子类对象时,可通过重写实现运行时动态绑定(详见后续“多态”章节)。
注意事项- 私有成员不可继承:父类的private属性和方法对子类不可见。
- 构造方法不继承:子类需通过super()调用父类构造方法(若父类无默认构造方法,必须显式调用)。
- 单继承限制:Java等语言中子类只能继承一个父类(但可通过接口实现多继承效果)。
完整示例代码// 父类public class Door { public int height; protected int width; public void openDoor() { System.out.println("Door is open ..."); } // 其他方法省略...}// 子类public class SafeDoor extends Door { @Override public void openDoor() { System.out.println("SafeDoor is unlocked and then opened ..."); } public void lockDoor() { System.out.println("Door is locked ..."); }}// 测试类public class MyDoor { public static void main(String[] args) { SafeDoor safeDoor = new SafeDoor(); safeDoor.openDoor(); // 调用重写后的方法 safeDoor.lockDoor(); // 调用扩展方法 safeDoor.setHeight(1000); // 继承父类方法 }}输出:
SafeDoor is unlocked and then opened ...Door is locked ...通过继承,SafeDoor既复用了Door的基础功能,又通过重写和扩展实现了防盗门的特有行为,体现了面向对象的高复用性和可扩展性。