继承、多态、封装等面向对象编程的高级概念

news/2024/4/16 14:49:58/文章来源:https://blog.csdn.net/weixin_45737584/article/details/129173503

面向对象编程(Object-Oriented Programming,简称OOP)是现代软件开发中非常重要的编程范式之一。Java是一种面向对象编程语言,提供了丰富的面向对象编程特性,包括继承、多态、封装等。本文将重点介绍Java面向对象编程的高级概念,包括继承、多态和封装。

继承

继承是面向对象编程中的一种基本机制,允许我们定义一个类来继承另一个类的属性和方法。在Java中,我们使用extends关键字实现继承。下面是一个简单的继承示例:

class Animal {public void eat() {System.out.println("Animal is eating.");}
}class Dog extends Animal {public void bark() {System.out.println("Dog is barking.");}
}

在上面的示例中,我们定义了一个名为Animal的类,其中包含一个名为eat的方法。我们还定义了一个名为Dog的类,它继承了Animal类,并添加了一个名为bark的方法。这意味着Dog类不仅继承了Animal类的eat方法,还拥有自己的bark方法。

多态

多态是面向对象编程中的另一个基本机制,允许我们在运行时动态地确定对象的类型。在Java中,多态可以通过向上转型和方法重写实现。下面是一个简单的多态示例:

class Animal {public void makeSound() {System.out.println("Animal is making sound.");}
}class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog is barking.");}
}class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat is meowing.");}
}public class Main {public static void main(String[] args) {Animal animal = new Dog();animal.makeSound(); // 输出 "Dog is barking."animal = new Cat();animal.makeSound(); // 输出 "Cat is meowing."}
}

在上面的示例中,我们定义了三个类:Animal、Dog和Cat。Animal类有一个名为makeSound的方法。Dog和Cat类分别重写了makeSound方法,实现了它们自己的声音。在Main类中,我们首先创建一个Dog对象并将其赋值给一个Animal变量,然后调用makeSound方法。由于Dog类重写了makeSound方法,所以输出为"Dog is barking."。接下来,我们创建一个Cat对象并将其赋值给同一个Animal变量,再次调用makeSound方法。由于Cat类重写了makeSound方法,所以输出为"Cat is meowing."。这就是多态的魅力所在,即同一方法调用可以在不同的对象上产生不同的结果。

封装

封装是面向对象编程的另一个基本概念,它允许我们隐藏类的内部实现细节,并仅暴露必要的接口。在Java中,我们使用访问修饰符来控制类的访问权限。下面是一个简单的封装示例:

public class Person {private String name;private int age;public String getName() {return name;}public void setName(String newName) {name = newName;}public int getAge() {return age;}public void setAge(int newAge) {age = newAge;}
}

在上面的示例中,我们定义了一个名为Person的类,它有两个私有属性:name和age。这意味着这些属性不能从类的外部直接访问。我们还定义了四个公共方法:getName、setName、getAge和setAge。这些方法允许外部代码访问和修改Person对象的属性,但仅通过公共接口,而不是直接访问私有属性。这就实现了封装,因为外部代码不能直接访问Person对象的内部实现细节。

我们再具体讲一下这些概念的一些细节。

继承

在Java中,所有的类都是从Object类继承而来的,这意味着每个Java对象都具有Object类的方法。当我们定义一个类时,我们可以通过继承来扩展它的功能。例如,假设我们有一个Animal类,我们可以创建一个Dog类,让它继承Animal类的属性和方法:

public class Animal {private String name;private int age;public Animal(String name, int age) {this.name = name;this.age = age;}public void eat() {System.out.println("This animal is eating.");}
}public class Dog extends Animal {public Dog(String name, int age) {super(name, age);}public void bark() {System.out.println("This dog is barking.");}
}

在上面的示例中,我们创建了一个Animal类和一个Dog类,让Dog类继承自Animal类。Dog类具有Animal类的属性和方法,并且可以定义自己的方法。通过这种方式,我们可以避免在Dog类中重复定义Animal类的属性和方法,从而提高代码的复用性和可维护性。

多态

多态是Java面向对象编程中的另一个重要概念。它允许我们在运行时动态地确定对象的类型,并以不同的方式处理它们。例如,假设我们有一个Animal类和一个Dog类,我们可以定义一个方法来接收Animal对象,并在运行时确定它的类型:

public void feedAnimal(Animal animal) {if (animal instanceof Dog) {Dog dog = (Dog) animal;dog.eatBone();} else {animal.eat();}
}

在上面的示例中,我们定义了一个feedAnimal方法,它接收一个Animal对象作为参数。如果这个对象是一个Dog对象,我们就将它转换成Dog类型并调用它自己的eatBone方法;否则,我们就调用它的eat方法。通过这种方式,我们可以根据对象的类型来执行不同的操作,从而实现代码的灵活性和可扩展性。

封装

封装是Java面向对象编程中的另一个基本概念,它允许我们隐藏类的内部实现细节,并仅暴露必要的接口。在Java中,我们使用访问修饰符来控制类的访问权限。有四种访问修饰符:public、protected、default和private。它们分别表示公共的、受保护的、默认的和私有的访问权限。

在Java中,我们通常使用private访问修饰符来隐藏类的内部实现细节,并提供公共的get和set方法来访问和修改类的属性。例如:

public class Person {private String name;
private int age;public Person(String name, int age) {this.name = name;this.age = age;
}public String getName() {return name;
}public void setName(String name) {this.name = name;
}public int getAge() {return age;
}public void setAge(int age) {this.age = age;
}
}
在上面的示例中,我们定义了一个Person类,它有两个私有属性name和age。我们提供了公共的getName和setName方法来访问和修改name属性,以及公共的getAge和setAge方法来访问和修改age属性。通过这种方式,我们可以隐藏类的内部实现细节,并提供必要的接口来访问和修改类的属性。#### 抽象类和接口抽象类和接口是Java面向对象编程中的两个高级概念。它们都用于定义一组方法的规范,但它们之间有一些重要的区别。抽象类是一个类,它包含抽象方法。抽象方法是一种没有实现的方法,它只有方法声明而没有方法体。在Java中,我们使用abstract关键字来定义抽象类和抽象方法。例如:```java
public abstract class Shape {public abstract double area();
}

在上面的示例中,我们定义了一个Shape类,它是一个抽象类。它包含一个抽象方法area,它没有实现。我们可以创建其他类来继承Shape类并实现area方法。

接口是一种特殊的抽象类,它只包含常量和抽象方法。在Java中,我们使用interface关键字来定义接口。例如:

public interface Drawable {void draw();
}

在上面的示例中,我们定义了一个Drawable接口,它包含一个抽象方法draw。我们可以创建其他类来实现Drawable接口并实现draw方法。

抽象类和接口都是用来定义方法规范的。但是,抽象类可以包含成员变量和非抽象方法,而接口只能包含常量和抽象方法。此外,一个类只能继承一个抽象类,但是可以实现多个接口。因此,我们需要根据具体情况来选择使用抽象类还是接口。

以上是Java面向对象编程中的一些高级概念,它们都是非常重要的概念,在Java编程中经常被使用。熟练掌握这些概念,将有助于我们编写出高质量、易于维护的Java程序。

总结

继承、多态和封装是Java面向对象编程的高级概念,对于编写可维护和可扩展的代码非常重要。继承允许我们定义一个类来继承另一个类的属性和方法,从而避免了重复代码。多态允许我们在运行时动态地确定对象的类型,从而实现了代码的灵活性和可扩展性。封装允许我们隐藏类的内部实现细节,并仅暴露必要的接口,从而提高了代码的安全性和可维护性。理解和掌握这些概念是成为一名优秀的Java程序员的关键所在。

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

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

相关文章

Linux PWM 开发指南

Linux PWM 开发指南 1 概述 1.1 编写目的 介绍 PWM 模块的详细设计方便相关人员进行 PWM 模块的代码设计开发。 1.2 使用范围 适用于 Linux-3.10,linux-4.4 和 Linux-4.9 内核,Linux-5.4 内核。 1.3 相关人员 PWM 驱动的开发人员/维护人员等 2 术…

数据库系统概论——绪论

1、绪论 1.1、数据库系统概述 数据库系统的构成示意图 1.1.1、数据库系统基本概念 基本概念:数据、数据库、数据库管理系统和数据库系统 1)数据(data) 定义:描述事物的符号记录称为数据数据是数据库中存储的基本对象…

中科检测赴中科院广州电子CASAIM开展座谈会,围绕3D打印、三维扫描和精密测量展开深入交流

2月9日,中科检测技术服务(广州)股份有限公司(简称:中科检测)一行到访中科院广州电子技术有限公司,参观广东省增材制造工程实验室和三维扫描及精密测量重点实验室,就3D打印、三维扫描和精密测量相关技术内容…

NTP同步时钟为医院提供标准的时间信号

NTP同步时钟应用于城市重要公共领域,如车站、学校、医院、等。NTP同步时钟可提供准确的公众时间,为人们的日常生活提供便利,避免了因时钟不准确而带来的不便。NTP同步时钟采用智能模块化设计,与同类产品相比,更突出了安…

JavaScript Web API实战:7个小众技巧让你的网站瞬间提升用户体验

随着技术的日新月异,为开发人员提供了令人难以置信的新工具和API。但据了解,在100 多个 API中,只有5%被开发人员积极使用。 让我们来看看一些有用的Web API,它们可以帮助您将网站推向月球! 1、 截屏接口 Screen Capt…

ELK日志分析--Logstash

Logstash简介 Logstash安装 测试运行 配置输入和输出 使用Geoip过滤器插件增强数据编辑 配置接收 Beats 的输入 1.Logstash简介 Logstash管道具有两个必需元素input和output,以及一个可选元素filter。输入插件使用来自源的数据,过滤器插件根据你的…

shell的测试语句

一、shell的条件测试语句 在写shell脚本时,经常遇到的问题就是判断字符串是否相等,可能还要检查文件状态或进 行数字测试,只有这些测试完成才能做下一步动作。 1.1、shell脚本中的条件测试如下: 1、文件测试 2、字符串测试 3、数…

《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(三)

声明:此系列答案配套《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》一书相关内容。所有内容为博主个人编辑,仅作参考学习交流之用,转载请注明出处。如发现错误,请联系博主及时勘误…

java JMM 内存屏障

内存屏障的目的 每个CPU都会有自己的缓存(有的甚至L1,L2,L3),缓存的目的就是为了提高性能,避免每次都要向内存取。但是这样的弊端也很明显:不能实时的和内存发生信息交换,分在不同CPU执行的不同线程对同一…

基于SPI的增强式插件框架设计

很久之前,为了诊断线上的问题,就想要是能有工具可以在线上出问题的时候,放个诊断包进去马上生效,就能看到线上问题的所在,那该是多么舒服的事情。后来慢慢的切换到 java 领域后,这种理想也变成了现实&#…

【selenium 自动化测试】如何搭建自动化测试环境,搭建环境过程应该注意的问题

最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的…

2023年PMP考试应该注意些什么?

首先注意(报考条件) 2023年PMP考试报名流程: 一、PMP英文报名: 英文报名时间无限制,随时可以报名,但有一年的有效期,所以大家尽量提前报名,在英文报名有效期内进行中文报名。 英…

深度卷积对抗神经网络 进阶 第三部分 GANs Unpaired Translation with Cycle GAN 模型

非配对的图像转换应用 Unpaired Image-to-Image Translation Unpaired image-to-image translation 主要用于学习两组图像之间的对应关系,检查和寻找两堆数据中的共同内容(content)以及每堆独有的特点(style)。而这个…

【Database-03】从 MySQL 迁移到 达梦数据库(DM 8)

1、环境 源数据库 MySQL 8.30 目标数据库 DM 8 操作系统 Centos 9 Steam 迁移工具 DM 数据迁移工具 (DM DTS) 2、开始迁移 2.1、打开DM数据迁移工具 在新建工程对话框中填写工程名和工程描述信息,点击【确定】按钮,成功添加了一个工程。 2.2、新建迁…

3年经验,3轮技术面+1轮HR面,拿下字节30k*16薪offer,这些自动化测试面试题值得大家借鉴

面试一般分为技术面和hr面,形式的话很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的,hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来…

2023年,IT互联网还有发展前景吗?

不得不说,互联网在整个社会经济发展中扮演着不可或缺的角色;不仅自身的技术具有前沿性,也推动着其他行业进入数字化经济时代,让我们的工作生活变得更加便捷。 在“互联网”时代,每个服务行业都会利用大数据&#xff0…

SpringBoot入门(二)

这里写目录标题一、SpringBoot整合Junit1.1 搭建SpringBoot工程1.2 引入starter-test起步依赖1.3 编写类1.4 测试二、SpringBoot整合mybatis2.1 搭建SpringBoot工程2.2 引入mybatis起步依赖,添加驱动2.3 编写DataSource和MyBatis相关配置2.4 定义表和实体类2.5 编写…

Bootstrap入门到精通

文章目录前言一、Bootstrap是什么?二、Bootstrap安装方式一:将压缩包下载到本地引入使用方式二:使用Bootstrap官方cdn二.Bootstrap容器下面是屏幕宽度在不同大小时不同容器的显示状态三.Bootstrap栅格系统bootstrap网格系统有以下六个类网格系…

linux shell 入门学习笔记7 父子shell面试题

1. 不同的执行方式,不同的shell环境 每次调用bash/sh解释器执行脚本都会开启一个子shell,因此不保留当前shell变量,通过pstree命令检查进程树调用source是当前环境加载脚本,因此保留变量 例子: xiao123xiao123:~/Dow…

直播间的2个小感悟

我是卢松松,点点上面的头像,欢迎关注我哦! 在线人数固定 最近直播间出现了很多新面孔,有的是偶然刷到的,有的是关注互联网找到的。而直播间的人数一直没什么变化,卢松松在抖音直播较少,主播间…