面向对象
什么是面向对象
面向对象(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)是子类中存在一个与父类中的方法具有相同名称、相同参数列表和相同返回类型的方法。
区别:
特性 | 方法重载 | 方法重写 |
---|---|---|
作用域 | 同一个类中 | 父子类之间 、接口与实现类 直接 |
方法名称 | 相同 | 相同 |
参数列表 | 必须不同(数量、类型或顺序) | 必须相同 |
返回类型 | 可以不同 | 必须相同或为父类方法返回类型的子类型 |
访问修饰符 | 可以不同 | 不能比父类方法的访问修饰符更严格 |
异常 | 可以抛出任何异常 | 不能抛出比父类方法更广泛的异常 |
决策时机 | 编译时 | 运行时 |
目的 | 提供相同操作的不同实现 | 提供特定于子类的操作实现 |