大话面向对象(三):继承

大话面向对象(三):继承
最新回答
风铃鹿

2022-10-18 02:08:33

继承是面向对象编程中实现代码重用和扩展的核心机制,通过父类与子类的关系,子类可以继承父类的属性和方法,同时通过重写或扩展实现差异化功能。以下是对继承中关键概念的详细解析及代码示例说明:

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)
  • 定义:子类重新定义父类方法,实现差异化逻辑。
  • 示例:若防盗门开关方式不同,可重写openDoor():public class SafeDoor extends Door { @Override public void openDoor() { System.out.println("SafeDoor is unlocked and then opened ..."); }}
  • 关键点

    方法签名(名称、参数)必须与父类一致。

    使用@Override注解(非必须,但推荐)明确意图。

    访问权限不能比父类更严格(如父类为protected,子类不能改为private)。

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 ...
继承的核心优势
  1. 代码重用:子类直接复用父类方法,避免重复编写。
  2. 层次化设计:通过继承关系表达“是一个”(Is-A)的逻辑(如防盗门是门)。
  3. 多态基础:父类引用指向子类对象时,可通过重写实现运行时动态绑定(详见后续“多态”章节)。
注意事项
  • 私有成员不可继承:父类的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的基础功能,又通过重写和扩展实现了防盗门的特有行为,体现了面向对象的高复用性和可扩展性。