Java中的OOPS概念 – OOPS概念示例

面向对象编程概念对编程非常重要。如果没有关于面向对象编程概念的了解,你将无法在面向对象编程模型中设计系统。

什么是面向对象编程模型?

面向对象编程模型围绕对象的概念展开。什么是对象?对象是类的实例。它包含属性和函数。它们就像现实世界中的物体。例如,你的汽车、房子、笔记本电脑等都是对象。它们具有一些特定的属性和方法来执行某些操作。什么是类?类定义了对象的蓝图。它们定义了对象的属性和功能。例如,笔记本电脑是一个类,而你的笔记本电脑是它的一个实例。

面向对象编程概念

核心面向对象编程概念包括:

  1. 抽象
  2. 封装
  3. 多态
  4. 继承
  5. 关联
  6. 聚合
  7. 组合

让我们逐个了解这些面向对象编程的概念。我们将使用Java编程语言作为代码示例,以便您了解如何在Java中实现OOPS概念。

1. 抽象

抽象是隐藏内部细节并用简单术语描述事物的概念。例如,一个将两个整数相加的方法。该方法的内部处理对外部世界隐藏起来。在面向对象编程中,有许多实现抽象的方式,例如封装和继承。Java程序也是抽象的一个很好的例子。在这里,Java负责将简单语句转换为机器语言,并将内部实现细节隐藏起来,不对外界可见。

进一步阅读:面向对象编程中的抽象是什么?

2. 封装

封装是面向对象编程中实现抽象的技术。封装用于对类成员和方法进行访问限制。在面向对象编程中,使用访问修饰符关键字进行封装。例如,在Java中,封装是通过使用privateprotectedpublic关键字实现的。

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是超类,有两个子类CircleSquare。以下是运行时多态的示例。

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 示例程序。

参考文献:https://docs.oracle.com/javase/tutorial/java/concepts/

Source:
https://www.digitalocean.com/community/tutorials/oops-concepts-java-example