Java中OOP的概念及示例

news2024/10/25 16:22:39

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类别。因此,我们将此方法抽象为:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小学生杂志小学生杂志社小学生编辑部2024年第5期目录

教学研究 小学数学教学中易错题的纠正策略研究 黄喜军; 1-3 主题语境下小学英语作业多模态设计与实施策略研究 韩蓓; 4-6 小学美术教育中色彩教学的实施措施研究 顾雅洁; 7-9《小学生》投稿:cn7kantougao163.com 核心素养视域下小学英语单元整体教学…

Linux 6.10也引进了蓝屏机制

众所周知,win死机后会有个蓝屏死机的故障提示页面,Linux 6.10 开始也将引入这个机制。 Linux 6.10 引入了一个新的 DRM Panic 处理程序基础设施,以便于在致命错误(Panic)发生时显示相关信息。 Linux 6.10 还在开发之…

如何高效应用与精准选择温补晶振

温补晶振(TCXO)是一种重要的时序元件,因其高精度和高稳定性在通信、导航、测控等多个领域中扮演着关键角色。晶发电子接下来将为您详细阐述温补晶振的选用和使用方法,助您更好地理解和运用这一核心元件。 一、温补晶振的工作原理 温补晶振能够实现在广…

2024年【N1叉车司机】报名考试及N1叉车司机考试资料

题库来源:安全生产模拟考试一点通公众号小程序 N1叉车司机报名考试参考答案及N1叉车司机考试试题解析是安全生产模拟考试一点通题库老师及N1叉车司机操作证已考过的学员汇总,相对有效帮助N1叉车司机考试资料学员顺利通过考试。 1、【多选题】《特种设备…

Tailwindcss 扩展默认配置来自定义颜色

背景 项目里多个Tab标签都需要设置同样的背景颜色#F1F5FF,在集成tailwindcss之前就是重复该样式,如下图: .body {background-color: #f1f5ff; }集成tailwindcss时,我们希望在class中直接设置该背景色,但是默认的tai…

不懂索引,简历上都不敢写自己熟悉SQL优化

大家好,我是考哥。 今天给大家带来MySQL索引相关核心知识。对MySQL索引的理解甚至比你掌握SQL优化还重要,索引是优化SQL的前提和基础,我们一步步来先打好地基。 当MySQL表数据量不大时,缺少索引对查询性能的影响不会太大&#x…

递归算法:代码迷宫中的无限探索

✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 目录 前言 一 深入理解递归 二 迭代VS递归 三 递归算法题目解析 3.1 汉诺塔问题 3.2 合并两个有序链表 3.3 反转链表 3.4 两两交换链表中的节点 3.5 Pow(x,n)(快速幂)…

DAC测试实验——FPGA学习笔记7

一、DAC简介 DAC全称Digital to Analog Converter,即数模转换器。它用于将主控芯片产生的数字值(0和1)转换为模拟值(电压值)。 1、DAC参数指标 2、DAC类型 常用的DAC可大致分为权电阻网络DAC、T型电阻网络DAC、倒T型电阻网络DAC以及权电流型DAC。 3、AD9708/3PD9…

【stm32-新建工程-寄存器版本】

stm32-新建工程-寄存器版本 ■ 下载相关STM32Cube官方固件包(F1,F4,F7,H7)■ 1. ST官方搜索STM32Cube■ 2. 搜索 STM32Cube■ 3. 点击获取软件■ 4. 选择对应的版本下载■ 5. 输入账号信息■ 6. 出现下载弹框&#xff…

智能座舱中的HUD介绍

HUD(Head Up Display,抬头显示系统)是将车速、油耗、胎压等行车重要信息投影到前方挡风玻璃上的一套显示系统。HUD 最早应用在战斗机上,旨在降低飞行员低头查看仪表的频率,使得飞行员能在保证正常驾驶的同时&#xff0…

# 消息中间件 RocketMQ 高级功能和源码分析(七)

消息中间件 RocketMQ 高级功能和源码分析(七) 一、 消息中间件 RocketMQ 源码分析:消息存储核心类介绍 1、消息存储在 store 模块中。消息存储核心类 DefaultMessageStore.java 2、消息存储核心类介绍 private final MessageStoreConfig me…

汇编程序入门指南

什么是机器语言? 机器语言就是由二进制数字构成的程序,CPU 可以直接对其解释、执行。 汇编语言、C 语言、Java、BASIC 等编程语言编写的程序,也都需要先转换成机器语言才能被执行。机器语言有时也叫作“原生代码”(Native Code&…

无线麦克风推荐哪些品牌,热门领夹无线麦克风哪个好,看本期文章

​在信息爆炸的今天,高品质的无线领夹麦克风能让声音更清晰响亮。技术发展带来多样化选择同时也带来选择困难。根据多年使用经验和行业反馈,我推荐一系列可靠、易用且性价比高的无线领夹麦克风,助你作出明智选择。还要不知道该怎么选无线领夹…

Day7—zookeeper基本操作

ZooKeeper介绍 ZooKeeper(动物园管理员)是一个分布式的、开源的分布式应用程序的协调服务框架,简称zk。ZooKeeper是Apache Hadoop 项目下的一个子项目,是一个树形目录服务。 ZooKeeper的主要功能 配置管理 分布式锁 集群管理…

【C++LeetCode】【热题100】两数相加【中等】-不同效率的题解【1】

题目: 暴力方法: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNo…

模拟算法:代码世界的生活模拟器

✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一. 模拟算法的总结 二. 模拟算法题目 2.1 替换所有的问号 2.2 提莫攻击 2.3 Z字形变换 2.4 外观数列 2.5 数青蛙 总结 前言 本篇详细介绍了模拟算法的使用,让…

Word 文本框技巧2则

1 调整大小 一种方法是,选中文本框,周围出现锚点,然后用鼠标拖动来调整大小; 精确按数值调整,在 格式 菜单下有多个分栏,一般最后一个分栏是 大小 ;在此输入高度和宽度的数值,来调整…

万能DIY预约小程序源码系统 适合任何行业在线预约报名 带完整的安装代码包以及搭建教程

系统概述 在当今数字化时代,线上预约和报名系统已经成为各行各业不可或缺的工具。为了满足市场需求,万能 DIY 预约小程序源码系统应运而生,它为各类企业和组织提供了一种便捷、高效、灵活的解决方案,可适用于任何行业的在线预约和…

3D营销可以应用于哪些领域?

着科技的飞速发展,3D营销技术正逐渐为各行各业带来前所未有的机遇与挑战,特别是在电商、汽车、数码家电、家居、时尚、教育、制造等领域,其应用愈发广泛。 1. 汽车行业 3D营销为汽车行业打破了时空的界限,构建了逼真的虚拟展厅。…

手把手教程 | 云端部署语音合成神器——ChatTTS

近期,ChatTTS 凭借其高度仿真的 AI 语音合成技术迅速走红!ChatTTS 是专为对话场景设计的文本转语音模型,例如 LLM 助手对话任务,支持中英文两种语言。其最大的模型在超过 10 万小时的中英文数据上进行训练,确保了高质量…