首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 面向对象三大特性详解:封装、继承与多态

     編輯:Java 相關知識

封装

隐藏对象内部属性与实现细节,仅暴露公共接口,控制属性访问权限。

  • 属性 private,提供 getXxx()/setXxx() 方法。
  • 方法按需 public/private。
  • 构造器:有参构造器建议保留无参构造器(框架反射需求)。
  • 常重写 toString() 便于调试。

目的:增强安全性、简化调用、降低耦合。

继承

通过 extends 实现代码复用。Java 单继承,所有类隐式继承 Object。

  • 子类不可继承父类 private 成员。
  • 子类可重写父类方法(覆盖),可定义同名字段(隐藏)。
  • 构造器不被继承,但子类构造器首行隐式/显式调用 super()。
  • 开发中尽量减少继承层级,优先组合/聚合,降低耦合。

多态

分编译时多态(重载)与运行时多态(重写/覆盖)。

  • 重载:同一类中同名方法、参数列表不同,编译期静态绑定。
  • 重写:子类重写父类非 private 方法,运行期动态分发(根据实际对象类型调用)。
  • 父类引用可指向子类对象(向上转型),接口引用可指向实现类对象。

多态经典面试题解析

class A { String show(D o) { return "A and D"; } String show(A o) { return "A and A"; } }
class B extends A { String show(B o) { return "B and B"; } String show(A o) { return "B and A"; } }
class C extends B {}
class D extends B {}

public class Test {
    public static void main(String[] args) {
        A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D();
        System.out.println("1--" + a1.show(b)); // A and A
        System.out.println("2--" + a1.show(c)); // A and A
        System.out.println("3--" + a1.show(d)); // A and D
        System.out.println("4--" + a2.show(b)); // B and A
        System.out.println("5--" + a2.show(c)); // B and A
        System.out.println("6--" + a2.show(d)); // A and D
        System.out.println("7--" + b.show(b));  // B and B
        System.out.println("8--" + b.show(c));  // B and B
        System.out.println("9--" + b.show(d));  // A and D
    }
}

核心规则:

  1. 调用方法由实际对象类型决定(动态分发)。
  2. 但方法签名必须在编译期类型(引用类型)的类层级中存在。
    例:a2.show(b),a2 编译类型 A,A 中无 show(B),向上查找找到 show(A),B 重写了该方法 → 执行 B.show(A) → B and A。
    a1.show(d),A 有 show(D) → 直接执行 A.show(D) → A and D。

super 关键字

  • super():子类构造器首行调用父类构造器。
  • super.method():调用父类被重写的方法。
  • super.field:访问父类被隐藏的字段。

总结

封装、继承、多态是面向对象基石。实战中:高内聚低耦合,优先组合,谨慎继承,善用接口多态实现可扩展架构。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved