面向对象编程概念对编程非常重要。如果没有关于面向对象编程概念的了解,你将无法在面向对象编程模型中设计系统。
什么是面向对象编程模型?
面向对象编程模型围绕对象的概念展开。什么是对象?对象是类的实例。它包含属性和函数。它们就像现实世界中的物体。例如,你的汽车、房子、笔记本电脑等都是对象。它们具有一些特定的属性和方法来执行某些操作。什么是类?类定义了对象的蓝图。它们定义了对象的属性和功能。例如,笔记本电脑是一个类,而你的笔记本电脑是它的一个实例。
面向对象编程概念
核心面向对象编程概念包括:
- 抽象
- 封装
- 多态
- 继承
- 关联
- 聚合
- 组合
让我们逐个了解这些面向对象编程的概念。我们将使用Java编程语言作为代码示例,以便您了解如何在Java中实现OOPS概念。
1. 抽象
抽象是隐藏内部细节并用简单术语描述事物的概念。例如,一个将两个整数相加的方法。该方法的内部处理对外部世界隐藏起来。在面向对象编程中,有许多实现抽象的方式,例如封装和继承。Java程序也是抽象的一个很好的例子。在这里,Java负责将简单语句转换为机器语言,并将内部实现细节隐藏起来,不对外界可见。
进一步阅读:面向对象编程中的抽象是什么?
2. 封装
封装是面向对象编程中实现抽象的技术。封装用于对类成员和方法进行访问限制。在面向对象编程中,使用访问修饰符关键字进行封装。例如,在Java中,封装是通过使用private
、protected
和public
关键字实现的。
3. 多态
多态是对象在不同情况下表现出不同行为的概念。有两种类型的多态 – 编译时多态和运行时多态。编译时多态是通过方法重载实现的。例如,我们可以有如下类。
public class Circle {
public void draw(){
System.out.println("Drwaing circle with default color Black and diameter 1 cm.");
}
public void draw(int diameter){
System.out.println("Drwaing circle with default color Black and diameter"+diameter+" cm.");
}
public void draw(int diameter, String color){
System.out.println("Drwaing circle with color"+color+" and diameter"+diameter+" cm.");
}
}
这里我们有多个draw
方法,但它们具有不同的行为。这是方法重载的情况,因为所有方法的名称相同,参数不同。在编译时编译器将能够识别要调用的方法,因此称为编译时多态。当对象之间存在“IS-A”关系时,运行时多态性被实现。这也被称为方法重写,因为子类必须重写超类方法以实现运行时多态。如果我们根据超类进行工作,实际的实现类在运行时决定。编译器无法决定调用哪个类的方法。这个决定是在运行时做的,因此称为运行时多态或动态方法分派。
package com.journaldev.test;
public interface Shape {
public void draw();
}
package com.journaldev.test;
public class Circle implements Shape{
@Override
public void draw(){
System.out.println("Drwaing circle");
}
}
package com.journaldev.test;
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Drawing Square");
}
}
Shape
是超类,有两个子类Circle
和Square
。以下是运行时多态的示例。
Shape sh = new Circle();
sh.draw();
Shape sh1 = getShape(); //some third party logic to determine shape
sh1.draw();
在上面的例子中,Java编译器不知道在运行时将使用的Shape的实际实现类,因此是运行时多态。
4. 继承
继承是面向对象编程的概念,其中一个对象基于另一个对象。继承是代码重用的机制。被继承的对象称为超类,而继承超类的对象称为子类。我们在Java中使用extends
关键字来实现继承。以下是Java中继承的简单示例。
package com.journaldev.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. 组合
组合是聚合的一种特殊情况。组合是聚合的一种更为严格的形式。当“拥有-一个”关系中的包含对象无法单独存在时,这就是组合的情况。例如,房子拥有房间。在这里,房间不能没有房子而存在。组合被认为比继承更好,更多内容请参阅组合 vs 继承。
进一步阅读:Java 中的组合
这就是关于面向对象编程概念的简要概述。
您可以从我们的GitHub 代码库中查看更多 Java 示例程序。
Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example