Java中OOP的概念及示例

Java中OOP的概念及示例

在本指南中,您将学习Java中的OOP概念。面向对象编程系统(OOP)是一种基于“对象”的编程概念。面向对象编程的主要目的是提高程序的可读性、灵活性和可维护性。

面向对象编程将数据及其行为集中在一个称为对象的实体中。它使编程更容易理解。我们将详细介绍OOP的所有特性,如继承、多态、抽象、封装,这样您就不会在理解Java中的OOP时遇到任何困难。

支持面向对象编程的流行编程语言有:Java、C++、Python、C#、Perl、JavaScript、Ruby、Smalltalk等。

Java中的OOP概念是什么
OOP概念包括以下面向对象编程概念:

  • 对象
  • class 类
  • 抽象
  • 封装
  • 继承
  • 多态性

1.对象
对象可以表示为具有状态和行为的实体。例如:汽车是一个具有颜色、型号、价格等状态和速度、启动、换档、停车等行为的物体。

Java中OOP的概念-对象类
让我们来理解状态和行为之间的区别。对象的状态是一个数据项,可以用汽车价格、颜色等值来表示,将它们视为编程中的变量。行为就像类的一个方法,是一组可以一起执行任务的操作。例如,换档是一种行为,因为它涉及多个子任务,如速度控制、离合器、档把移动。
让我们再举几个对象的例子:

状态和行为示例
示例1:
类别:房屋
状态:地址、颜色、区域
行为:开门、关门

让我们看看如何在java程序中编写这些状态和行为。状态可以表示为实例变量,行为可以表示为类的方法。

class House {
   String address;
   String color;
   double area;
   void openDoor() {
      //Write code here
   }
   void closeDoor() {
      //Write code here
   }
 ...
 ...
}

示例2:
类别:汽车
状态:颜色、品牌、重量、型号
行为:刹车、加速、减速、换挡。

注意:正如我们在上面的例子中看到的,对象的状态和行为可以用类中的变量和方法来表示。

类可以被视为蓝图,您可以使用它来创建任意多的对象。例如,这里我们有一个类Website,它有两个数据成员。这只是一个蓝图,它不代表任何网站,但是使用它我们可以创建代表网站的网站对象。我们创建了两个对象,在创建对象时,我们使用构造函数为对象提供了单独的属性。

public class Website {
   //fields (or instance variable)
   String webName;
   int webAge;

   // constructor
   Website(String name, int age){
      this.webName = name;
      this.webAge = age;
   }
   public static void main(String args[]){
      //Creating objects
      Website obj1 = new Website("beginnersbook", 11);
      Website obj2 = new Website("google", 28);

     //Accessing object data through reference
     System.out.println(obj1.webName+" "+obj1.webAge);
     System.out.println(obj2.webName+" "+obj2.webAge);
   }
}
public class hello {

		String name;
		int age;
		
		
		hello(String webname,int webage){
		
			this.age =webage;
			this.name=webname;
			
		}
		
		   public static void main(String args[]){
			   // Creating instance of JFrame

			     hello obj1 = new  hello("beginnersbook", 11);
			     hello obj2 = new  hello("google", 28);

			     //Accessing object data through reference
			     System.out.println(obj1.name+" "+obj1.age);
			     System.out.println(obj2.name+" "+obj2.age);
				
	  }
	}

3.摘要
抽象是一个只显示“相关”数据并向用户“隐藏”对象不必要细节的过程。例如,当您在线登录到您的银行账户时,输入您的user_id和密码并按login,按login时会发生什么,输入数据如何发送到服务器,以及如何验证,这些都是从您身上抽象出来的。在这里关于它的信息:Java中的抽象。

抽象类示例:
在这里,我们有一个抽象类Animal,它具有一个抽象方法animalSound(),由于动物的声音因动物而异,因此没有必要为该方法提供实现,因为每个子类都必须覆盖该方法以提供自己的实现详细信息。这就是我们把它抽象化的原因。

现在每个动物都必须有一个声音,通过使这个方法抽象化,我们强制要求子类提供这个方法的实现细节。通过这种方式,我们确保每只动物都有声音。

abstract class Animal{
   //abstract method
   public abstract void animalSound();
}
public class Dog extends Animal{

   public void animalSound(){
	System.out.println("Woof");
   }
   public static void main(String args[]){
	Animal obj = new Dog();
	obj.animalSound();
   }
}

4.封装
封装只是指将对象状态(字段)和行为(方法)绑定在一起。如果您正在创建类,那么您正在进行封装。

实例
1) 将实例变量设为私有变量,这样就不能从类外部直接访问它们。只能通过类的方法设置和获取这些变量的值。
2) 在类中使用getter和setter方法来设置和获取字段的值。

 

class EmployeeCount
{
   private int numOfEmployees = 0;
   public void setNoOfEmployees (int count)
   {
       numOfEmployees = count;
   }
   public double getNoOfEmployees () 
   {
       return numOfEmployees;
   }
}
public class EncapsulationExample
{
   public static void main(String args[])
   {
      EmployeeCount obj = new EmployeeCount ();
      obj.setNoOfEmployees(5613);
      System.out.println("No Of Employees: "+(int)obj.getNoOfEmployees());
    }
}

使用EmployeeCount类的Object的类EncapsulationExample将无法直接获取NoOfEmployees。它必须使用同一类的setter和getter方法来设置和获取值。

在java编程中使用封装的好处是什么?
好吧,在某个时候,如果你想更改EmployeeCount类的实现细节,你可以自由地这样做,而不会影响使用它的类。

package helloword;



	public class hello{
		
	   
	   public static void main(String args[]){
		   
		   EmployeeCount obj = new EmployeeCount ();
		      obj.setNoOfEmployees(5613);
		      System.out.println("No Of Employees: "+(int)obj.getNoOfEmployees());
		
	   }
	   
	}
	
	
	
	class EmployeeCount
	{
	   private int numOfEmployees = 0;
	   public void setNoOfEmployees (int count)
	   {
	       numOfEmployees = count;
	   }
	   public double getNoOfEmployees () 
	   {
	       return numOfEmployees;
	   }
	}

	
	     

使用EmployeeCount类的Object的类EncapsulationExample将无法直接获取NoOfEmployees。它必须使用同一类的setter和getter方法来设置和获取值。

在java编程中使用封装的好处是什么?
好吧,在某个时候,如果你想更改EmployeeCount类的实现细节,你可以自由地这样做,而不会影响使用它的类。

5.继承
一个类获取另一个类的属性和功能的过程称为继承。继承提供了代码可重用性的思想,每个子类只定义那些对它唯一的特性,其余的特性可以从父类继承。

继承是在现有类的基础上通过扩展其公共数据成员和方法来定义新类的过程。继承允许我们重用代码,它提高了java应用程序的可重用性。父类称为基类或超类。扩展基类的子类称为派生类、子类或子类。注意:继承的最大优点是基类中的代码不需要在子类中重写。基类的变量和方法也可以在子类中使用。

语法:Java中的继承
为了继承类,我们使用extends关键字。这里A班是儿童班,B班是家长班。

class A extends B
{
}

泛化和专业化:
为了在面向对象程序中实现继承的概念,必须首先识别不同类之间的相似性,从而得出基类。

这种识别不同类之间相似性的过程被称为泛化。泛化是从两个或多个类中提取共享特征,并将它们组合成广义超类的过程。共享特征可以是属性或方法。

与一般化相反,专门化意味着从现有类中创建新的子类。如果某些属性或方法只适用于类的某些对象,则可以创建子类。

继承示例
在这个例子中,我们有一个家长班的老师和一个孩子班的数学老师。在MathTeacher课堂上,我们不需要编写与当前课堂上已经存在的代码相同的代码。这里我们有所有教师通用的学院名称、名称和does()方法,因此MathTeacher类不需要编写此代码,通用的数据成员和方法可以从Teacher类别继承。

class Teacher {
   String designation = "Teacher";
   String college = "Beginnersbook";
   void does(){
	System.out.println("Teaching");
   }
}
public class MathTeacher extends Teacher{
   String mainSubject = "Maths";
   public static void main(String args[]){
      MathTeacher obj = new MathTeacher();
      System.out.println(obj.college);
      System.out.println(obj.designation);
      System.out.println(obj.mainSubject);
      obj.does();
   }
}

 

注意:Java中允许多级继承,但不允许多重继承,如下图所示。

 

继承类型:
单一继承:指的是一个类扩展另一个类的子类和父类关系。

多级继承:是指一个类扩展子类的子类和父类关系。例如,类A扩展类B,类B扩展类C。

层次继承:是指父类和子类的关系,其中多个类扩展了同一个类。例如,类B扩展类A,类C扩展类A。

多重继承:是指一个类扩展多个类的概念,这意味着一个子类有两个父类。Java不支持多重继承,请点击此处了解更多信息。

大多数新的OO语言,如Small Talk、Java、C#,都不支持多重继承。C++支持多重继承。

6.多态性
多态性是一种面向对象的编程特性,它允许我们以不同的方式执行单个操作。例如,假设我们有一个类Animal,它有一个方法animalSound(),这里我们不能实现这个方法,因为我们不知道哪个Animal类会扩展Animal类别。因此,我们将此方法抽象为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/726443.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

反射机制详解

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Java从入门到精通 ✨特色专栏&#xff…

XSS+CSRF组合拳

目录 简介 如何进行实战 进入后台创建一个新用户进行接口分析 构造注入代码 寻找XSS漏洞并注入 小结 简介 (案例中将使用cms靶场来进行演示) 在实战中CSRF利用条件十分苛刻,因为我们需要让受害者点击我们的恶意请求不是一件容易的事情…

企业为什么要进行数据资产管理工作:价值与案例剖析

在数字化浪潮席卷全球的今天,数据已经成为企业不可或缺的重要资产。数据资产管理,作为确保数据资产价值得以最大化利用的关键环节,正逐渐成为企业战略规划中的核心议题。本文将深入剖析企业进行数据资产管理工作的必要性,并结合实…

[YOLOv10:注意力机制的轻量化创新,MLCA在目标检测中的卓越表现]

本文改进:一种轻量级的Mixed Local Channel Attention (MLCA)模块,该模块考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果。 1.YOLOv10介绍 论文:[https://arxiv.org/pdf/2405.14458] 代码: https://gitcode.com/THU-MIG/yolov10?utm_source=csdn…

Visual Studio2022+cuda环境配置及代码调试

环境配置 下载并安装CUDA Toolkit 打开Visual Studio,新建项目。如下图所示,已经包含CUDA编程选项 代码调试 1、打开cu文件的属性页,按下图所示,将Host中的Generate Host Debug Information设置为“是" 2、不可勾选Nsight…

塑造化工行业新格局:探索无锡哲讯智能化定制ERP系统的关键特点

在当今科技迅猛发展的时代背景下,化工行业面临着前所未有的机遇与挑战。传统的管理模式已经难以满足企业日益增长的需求,而企业资源规划(ERP)系统的引入,为化工行业带来了全新的变革。无锡哲讯,作为行业领先…

如何防止三重勒索勒索软件?

您的数据被加密后,定期备份数据是一个很好的策略,可以避免支付赎金,但这并不意味着攻击者仍然无法占得上风。一些攻击者现在正转向三重勒索勒索软件攻击,扬言不仅要劫持您的数据,还要将这些信息泄露给公众。 这类勒索…

ffmpeg的安装教程

1.官网下载ffmpeg 进入Download FFmpeg网址,点击下载windows版ffmpeg(点击左下第一个绿色的行) 在release builds第一个绿框里面选择一个版本下载。 2.配置 下载完成后解压该压缩包单击进入ffmpeg\bin,会出现如下界面&#xff1…

Linux驱动开发(二)--字符设备驱动开发提升 LED驱动开发实验

1、地址映射 在编写驱动之前,需要知道MMU,也就是内存管理单元,在老版本的 Linux 中要求处理器必须有 MMU,但是现在Linux 内核已经支持无 MMU 的处理器了。 MMU的功能如下: 完成虚拟空间到物理空间的映射 内存保护&…

瑞尼克RNK聚四氟乙烯注射器刻度清晰纯净

四氟注射器用于抽取或者注入气体或者液体,四氟注射器由前端带有小孔的针筒以及与之匹配的活塞芯杆组成,用来将少量的液体或其注入到其它方法无法接近的区域或者从那些地方抽出,在芯杆拔出的时候液体或者气体从针筒前端小孔吸入,在…

0.5 逐行扫描(Progressive scan)简介

0.5 逐行扫描简介 逐行扫描(Progressive scan)是一种将图像显示在扫描式的显示设备上的方法。 逐行扫描常被用在计算机显示器上。 逐行扫描按照从左到右,从上到下的顺序扫描图像的所有行。如下图: 下图粗略的将逐行扫描与隔行…

思科PAP命令笔记

命令格式 含义 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/qq_44862120/article/details/115675197 ——————…

ssh远程连接vps

打开ssh服务 sudo vi /etc/ssh/sshd_config查看是否好了 systemctl status sshd生成ssh私钥 生成在C:\Users\baozhongqi\.ssh 然后可以用自己密码登录或者用私钥登录 密码登录 ssh私钥登录 我使用的是tabby tabby下载 setup是Windows使用的版本 如果这样子不能ssh链接只能…

【管理咨询宝藏131】麦肯锡波士顿贝恩经典战略咨询报告套装

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏131】麦肯锡波士顿贝恩经典战略咨询报告套装 【格式】PDF版本 【关键词】麦肯锡、波士顿咨询、贝恩咨询、战略咨询、战略落地、战略洞察 【强烈…

【深度学习】 探讨Stable Diffusion模型的训练及其偏向性

探讨Stable Diffusion模型的训练及其偏向性 近年来,生成式模型在图像生成领域取得了显著进展,特别是Stable Diffusion模型。作为一种基于扩散过程的生成模型,Stable Diffusion模型展现了生成高质量图像的巨大潜力。然而,与所有机…

队列(数据结构篇)

数据结构之队列 队列(queue) 概念: 队列也是一种线性表,使用队列时插入在一端进行而删除则在另一端进行,队列的基本操作是入队,它是在表的末端(也叫做队尾)插入一个元素,出队,它是删除在**表的开头(**队…

OpenCV练习(2)图像校正

1、傅里叶变换 霍夫变换 直线 角度 旋转2、边缘检测 霍夫变换 直线角度 旋转3、四点透视 角度 旋转4、检测矩形轮廓 角度 旋转 1.目的 实现类似全能扫面王的图像校正功能 2. 基于轮廓提取和透射变换 基于轮廓提取和透射变换的矫正算法更适用于车牌、身份证、人民…

局域网共享文件夹怎么加密?方法很简单

局域网共享文件夹是企业内部信息、数据传递沟通的重要工具,而为了保护共享文件夹数据安全,我们需要使用专业的加密软件加密保护局域网共享文件夹。下面我们就来了解一下局域网共享文件夹加密方法。 局域网共享文件夹加密 在加密共享文件夹时&#xff0c…

LeetCode 338.比特位计数

各位朋友们,大家好啊,今天此题我用的方法比较好理解,但时间复杂度比较高如果大家觉得可以的话,不妨给个免费的赞吧,谢谢了^ _ ^ 1.题目要求如图所示: 2.做题步骤: 1.先计算总共多少个数: int count 0;int number 0;…