Java面向对象编程(OOPS)完全指南:核心概念与实例详解
Java中的OOPS概念 – OOPS概念示例
这是文章《Java中的OOPS概念 – OOPS概念示例》的第1部分(共1部分)。
面向对象编程概念对编程非常重要。如果没有关于面向对象编程概念的了解,你将无法在面向对象编程模式下设计系统。
什么是面向对象编程模型?
面向对象编程模型围绕着对象的概念展开。什么是对象?对象是类的一个实例。它包含属性和函数。它们就像现实世界的物体一样。例如,你的汽车、房子、笔记本电脑等都是对象。它们具有一些特定的属性和方法来执行某些操作。什么是类?类定义了对象的蓝图。它们定义了对象的属性和功能。例如,笔记本电脑是一个类,而你的笔记本电脑是它的一个实例。
面向对象编程概念

- 抽象化
- 封装
- 多态性
- 继承
- 关联
- 聚合
- 组合
让我们逐一探究这些面向对象编程概念。我们将使用Java编程语言举例,以便您了解如何在Java中实现OOPS概念。
1. 抽象化
抽象是隐藏内部细节并以简单术语描述事物的概念。例如,一个用于相加两个整数的方法。该方法的内部处理对外界是隐藏的。在面向对象编程中,有许多实现抽象的方法,如封装和继承。Java程序也是抽象的一个很好例子。在这里,Java负责将简单的语句转换为机器语言,并隐藏了内部实现细节对外界的表现。
进一步阅读:面向对象编程中的抽象是什么?
2. 封装
封装是在面向对象编程中实现抽象的一种技术。封装用于限制对类成员和方法的访问。在面向对象编程中,使用访问修饰符关键字来进行封装。例如,在Java中,可以使用private、protected和public关键字来实现封装。
3. 多态性
多态性是指一个对象在不同情况下表现出不同的行为。多态性有两种类型 – 编译时多态性和运行时多态性。编译时多态性是通过方法重载实现的。例如,我们可以有如下的一个类。
public class Circle {
public void draw(){
System.out.println("Drawing circle with default color Black and diameter 1 cm.");
}
public void draw(int diameter){
System.out.println("Drawing circle with default color Black and diameter"+diameter+" cm.");
}
public void draw(int diameter, String color){
System.out.println("Drawing circle with color"+color+" and diameter"+diameter+" cm.");
}
}
这里有多种绘图方法,但它们的行为不同。这是方法重载的一种情况,因为所有方法的名称相同,参数不同。编译器能够在编译时确定要调用的方法,因此被称为编译时多态性。当对象之间有”IS-A”关系时,我们实现了运行时多态性。这也被称为方法重写,因为子类必须重写超类方法以实现运行时多态性。如果我们按照超类的术语进行工作,实际实现类在运行时决定。编译器无法决定要调用哪个类的方法。此决策在运行时进行,因此称为运行时多态性或动态方法分派。
package com.Olivia.test;
public interface Shape {
public void draw();
}
package com.Olivia.test;
public class Circle implements Shape{
@Override
public void draw(){
System.out.println("Drawing circle");
}
}
package com.Olivia.test;
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing Square");
}
}
形状是父类,有两个子类:圆形和正方形。以下是运行时多态性的一个例子。
Shape sh = new Circle();
sh.draw();
Shape sh1 = getShape(); //某些第三方逻辑来确定形状
sh1.draw();
在上述示例中,Java编译器不知道在运行时将使用的Shape的实际实现类,因此具有运行时多态性。
4. 继承
继承是面向对象编程的概念,一个对象基于另一个对象。继承是代码复用的机制。被继承的对象被称为超类,继承超类的对象被称为子类。在Java中,我们使用extends关键字来实现继承。下面是Java中继承的一个简单示例。
package com.Olivia.java.examples1;
class SuperClassA {
public void foo(){
System.out.println("SuperClassA");
}
}
class SubClassB extends SuperClassA{
public void bar(){
System.out.println("SubClassB");
}
}
public class Test {
public static void main(String args[]){
SubClassB a = new SubClassB();
a.foo();
a.bar();
}
}
5. 关联
关联是一种面向对象编程的概念,用于定义对象之间的关系。关联定义了对象之间的多重性。例如,教师和学生对象之间存在一对多的关系。同样地,学生对象也可以与多个教师对象存在一对多的关系。然而,学生和教师对象都是相互独立的。
6. 聚合
聚合是一种特殊类型的关联。在聚合中,对象有自己的生命周期,但存在所有权关系。每当对象之间存在”有一个”(HAS-A)的关系并且有所有权时,就是聚合的情况。
7. 组合
组合是聚合的一种特例。组合是比聚合更为严格的形式。当”拥有”关系中的被包含对象无法独立存在时,那就是组合的情况。例如,房子拥有房间。在这种情况下,房间无法没有房子而存在。组合被认为优于继承,请阅读《组合与继承》了解更多信息。
进一步阅读:Java的编程
这就是有关OOPS概念的简要总结。
你可以在我们的GitHub仓库中查看更多Java示例程序。
参考资料:https://docs.oracle.com/javase/tutorial/java/concepts/
参考文献:https://docs.oracle.com/javase/tutorial/java/concepts/