面向对象

什么是面向对象

面向对象(Object-Oriented,OO)是一种编程范式,它将现实世界中的实体抽象为对象,并通过这些对象的交互来设计和构建软件系统。面向对象的核心概念是“对象”,每个对象都是数据和操作这些数据的方法的封装体。

面向对象编程三大基本特性

众所周知,三大特性有四个。|-_-|

  • 抽象

    抽象是简化复杂现实世界的过程,通过忽略不重要的细节,只关注对象的关键特征和行为。在编程中,抽象可以通过创建类和接口来实现。

  • 封装

    封装是将对象的状态(属性)和行为(方法)捆绑在一起,并隐藏内部实现的细节,对外只提供必要的接口。

  • 继承

    继承是一种机制,允许一个类(子类)继承另一个类(父类或基类)的属性和方法。

  • 多态

    多态是指同一个操作或方法在不同的对象中可以有不同的表现形式。
    多态是指对象可以有多种形式,允许使用统一的接口调用不同类的对象,具体调用哪个类的方法取决于对象的实际类型。

Java 继承

在 Java 中,继承是一种面向对象编程的核心概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。继承支持代码重用,并可以创建一个类层次结构,使得子类可以扩展或修改父类的行为。

什么不能被继承

  • 构造方法不能被继承

  • private 修饰的属性和方法不能被继承

  • static 修饰的属性和方法不能被继承

  • final 修饰的类、属性和方法不能被继承

  • native 修饰的方法不能被继承

  • default 没有指定访问修饰符的类、属性、方法不能被不同包中的类继承

  • 非静态内部类不能被直接继承

Java 多态

在 Java 编程语言中,多态性主要体现在方法的重载(Overloading)和重写(Overriding),以及接口的实现上。多态性使得同一个方法调用可以有不同的行为,这取决于对象的实际类型。

  • 编译时多态

    • 方法重载(Overloading):同一个类中有多个同名方法,但参数列表不同(参数的类型、数量或顺序不同)。

    • 方法重写(Overriding):子类重写父类的方法,提供具体的实现。

  • 运行时多态

    • 方法重写:子类覆盖父类的方法,并且调用时通过父类的引用调用子类的方法。

    • 接口实现:不同的类实现同一个接口,并且可以在运行时确定调用哪个实现

有些文章说,方法重载不是多态,是因为他们认为只有运行时多态,不存在什么编译时多态。

多态实现的基本条件:

  • 类继承/接口实现 :

    • 子类继承父类,并覆盖父类的方法

    • 不同的类实现同一个接口,并在运行时确定调用哪个实现。

  • 方法重写

    • 子类中的方法必须重写父类中的方法。

    • 实现类必须重写接口的方法

  • 向上转型

    • 父类引用指向子类对象。示例:Parent p = new Child();

Java 方法重载与方法重写的区别:

  • 方法重载(Method Overloading)是在同一类中存在多个同名方法,但它们的参数列表不同(参数的数量、类型或顺序不同)。

  • 方法重写(Method Overriding)是子类中存在一个与父类中的方法具有相同名称、相同参数列表和相同返回类型的方法。

区别:

特性 方法重载 方法重写
作用域 同一个类中 父子类之间 、接口与实现类 直接
方法名称 相同 相同
参数列表 必须不同(数量、类型或顺序) 必须相同
返回类型 可以不同 必须相同或为父类方法返回类型的子类型
访问修饰符 可以不同 不能比父类方法的访问修饰符更严格
异常 可以抛出任何异常 不能抛出比父类方法更广泛的异常
决策时机 编译时 运行时
目的 提供相同操作的不同实现 提供特定于子类的操作实现

参考

posted @ 2024-09-02 11:23  抒写  阅读(4)  评论(0编辑  收藏  举报