深入探讨Java面向对象编程(OOP)

引言

在上一篇文章中,我们介绍了Java的基础语法和概念,包括数据类型、条件语句、循环语句和基本的类与对象。在本篇文章中,我们将深入探讨Java的面向对象编程(OOP)特性。这些特性包括继承、封装、多态和抽象,它们是OOP的四大支柱。通过理解和应用这些概念,你将能够编写更具结构性和可维护性的Java程序。

继承(Inheritance)

继承是面向对象编程中的一个重要概念,它允许我们基于现有类创建新类,从而实现代码的重用。新类称为子类(或派生类),现有类称为父类(或基类)。

示例

// 父类
class Animal {String name;void eat() {System.out.println(name + " is eating.");}
}// 子类
class Dog extends Animal {void bark() {System.out.println(name + " is barking.");}
}public class InheritanceExample {public static void main(String[] args) {Dog dog = new Dog();dog.name = "Buddy";dog.eat();dog.bark();}
}

在这个例子中,Dog 类继承自 Animal 类,因此 Dog 类可以访问 Animal 类的属性和方法。

方法重写

子类可以重写父类的方法,以便提供特定的实现。

class Animal {void makeSound() {System.out.println("Animal is making a sound");}
}class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Dog is barking");}
}public class MethodOverrideExample {public static void main(String[] args) {Animal myDog = new Dog();myDog.makeSound();  // 输出 "Dog is barking"}
}

封装(Encapsulation)

封装是将对象的状态(属性)和行为(方法)封装在一个类中,并提供受控的访问。通过使用访问修饰符(如 privatepublicprotected),我们可以控制哪些属性和方法是对外可见的。

示例

class Person {private String name;private int age;// Getter 方法public String getName() {return name;}// Setter 方法public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {if (age > 0) {this.age = age;}}
}public class EncapsulationExample {public static void main(String[] args) {Person person = new Person();person.setName("John");person.setAge(25);System.out.println("Name: " + person.getName());System.out.println("Age: " + person.getAge());}
}

在这个例子中,Person 类的属性被声明为 private,只能通过公共的 gettersetter 方法访问,从而实现了封装。

多态(Polymorphism)

多态性允许我们使用相同的接口来调用不同的实际方法。这可以通过方法重载(编译时多态)和方法重写(运行时多态)实现。

方法重载

方法重载是指在同一个类中定义多个方法,它们具有相同的名字但参数不同。

class MathUtils {// 两个参数的 add 方法int add(int a, int b) {return a + b;}// 三个参数的 add 方法int add(int a, int b, int c) {return a + b + c;}
}public class MethodOverloadExample {public static void main(String[] args) {MathUtils math = new MathUtils();System.out.println("Sum of 2 numbers: " + math.add(10, 20));System.out.println("Sum of 3 numbers: " + math.add(10, 20, 30));}
}

方法重写

方法重写允许子类提供其自己的实现版本,而不是使用父类的方法。

class Animal {void makeSound() {System.out.println("Animal is making a sound");}
}class Cat extends Animal {@Overridevoid makeSound() {System.out.println("Cat is meowing");}
}public class PolymorphismExample {public static void main(String[] args) {Animal myCat = new Cat();myCat.makeSound();  // 输出 "Cat is meowing"}
}

抽象(Abstraction)

抽象是指将对象的复杂实现隐藏起来,只对外暴露必要的接口。Java 使用抽象类和接口来实现抽象。

抽象类

抽象类不能实例化,可以包含抽象方法(没有实现的方法)和具体方法。

abstract class Animal {abstract void makeSound();void sleep() {System.out.println("Animal is sleeping");}
}class Dog extends Animal {@Overridevoid makeSound() {System.out.println("Dog is barking");}
}public class AbstractClassExample {public static void main(String[] args) {Dog dog = new Dog();dog.makeSound();dog.sleep();}
}

接口

接口是一个纯粹的抽象类,只能包含抽象方法(Java 8 以后可以包含默认方法和静态方法)。

interface Animal {void makeSound();
}class Cat implements Animal {@Overridepublic void makeSound() {System.out.println("Cat is meowing");}
}public class InterfaceExample {public static void main(String[] args) {Cat cat = new Cat();cat.makeSound();}
}

总结

在本篇文章中,我们详细探讨了 Java 的面向对象编程特性,包括继承、封装、多态和抽象。这些概念是 Java 编程的核心,通过掌握这些特性,你可以编写更加结构化和可维护的代码。

在接下来的文章中,我们将继续深入探讨 Java 的高级特性,如泛型、集合框架和异常处理等。希望你能继续关注并享受学习的过程!

如果你有任何问题或需要进一步的解释,请在评论区留言。我们将尽快回复。感谢阅读!

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

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

相关文章

数据挖掘之标准化

简介 数据特征的标准化和归一化是数据预处理中常见的两种数据转换技术,它们的目的是使数据符合某种分布或范围,从而更适合于某些数据挖掘算法的使用。 标准化(Standardization) 也称为 Z-score 标准化 公式: z x − μ σ z \frac{x - \mu}{\sigma} zσx−μ​ 其中 z z…

如何理解Spring Boot自动配置原理和应用?

我们知道,基于Spring Boot,我们只需要在类路径中引入一组第三方框架的starter组件,就能在Spring容器中使用这些框架所提供的各项功能。这在当下的开发过程中已经习以为常,但在Spring Boot还没有诞生之前却是不可想象的。如果我们使…

国内下载huggingface模型的几种方式

要将 huggingface.co 的域名自动映射到重定向到 hf-mirror.com,可以采取以下几种方法(以Ubuntu 为例): 设置环境变量:通过设置环境变量 HF_ENDPOINT 来指定下载时使用的镜像站。这种方法不需要修改系统的 DNS 设置&…

这款信创FTP软件,可实现安全稳定的文件传输

信创,即信息技术应用创新,2018年以来,受“华为、中兴事件”影响,国家将信创产业纳入国家战略,并提出了“28n”发展体系。“8”具体指金融、石油、电力、电信、交通、航空航天、医院、教育等主要行业。目前企业使用比较…

0527_C++1

练习1&#xff1a; 定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置。 #include <iostream>using namespace std; namespace my_space {string s1"hello world";void my_strreverse…

对比表征学习(一)Contrastive Representation Learning

对比表征学习&#xff08;二&#xff09;Sentence Embedding 主要参考翁莉莲的Blog&#xff0c;本文主要聚焦于对比损失函数 对比表示学习&#xff08;Contrastive Representation Learning&#xff09;可以用来优化嵌入空间&#xff0c;使相似的数据靠近&#xff0c;不相似的数…

AWS数据库之DynamoDB

Amazon DynamoDB 是一款快速而灵活的 NoSQL 数据库服务&#xff0c;适合所有需要一致性且延迟不超过十毫秒的任意规模的应用程序。它是完全托管式云数据库&#xff0c;支持文档和键值存储模型。它拥有灵活的数据模型、可靠的性能以及自动的吞吐容量扩展功能&#xff0c;这使其成…

数据结构(四)双向链表

文章目录 一、概念二、无头双向链表示意图三、操作&#xff08;一&#xff09;定义结构体&#xff08;二&#xff09;创建链表1. 函数定义2. 注意点3. 代码实现 &#xff08;三&#xff09;插入1. 函数定义2. 注意点3. 代码实现 &#xff08;四&#xff09;删除1. 函数定义2. 注…

B端:ElementUI、AntDesign、若依等看腻了,来点不一样的。

现在对ElementUI、AntDesign和若依这些 UI 框架感到厌倦了&#xff0c;本次给大家分享一些更加个性化的UI界面。

MyBaitsPlus随笔

初识MyBaitsPlus 文章目录 初识MyBaitsPlus1.介绍优势 2 .简单使用1.添加依赖&#xff1a;2.配置数据源&#xff1a;3.编写实体类&#xff1a;4.编写Mapper接口&#xff1a;5.编写Service接口&#xff1a;6.编写Service实现类&#xff1a;7.使用Service进行操作&#xff1a;8.配…

干货|图生代码实例整理,让你的代码更高效

前言 “图生代码”。这项新功能允许开发人员直接利用产品设计图一键生成相应的代码&#xff0c;极大地提高了编程效率和研发速度。甚至会未来软件开发可能迎来一场革命性的变革。但图生代码究竟能直到什么程度&#xff1f;本文结合一款图生代码的实例程序整理了一些有代表意义…

C语言 数组——排序算法的函数实现

目录 交换法排序 用交换法对成绩数组升序排序 选择法排序 冒泡法排序 归并法排序 交换法排序 用交换法对成绩数组升序排序 选择法排序 冒泡法排序 归并法排序

期望薪资30k字节java2面,A给B转账的同时B给A转账怎么并发量最高

一面 1、自我介绍 2、详细介绍一下自己的做的项目&#xff1f;根据项目提了一些问题 3、hashmap原理 4、B树原理&#xff1f; 5、final禁止重排序原理&#xff1f; 6、设计一个榨汁机类&#xff0c;面向对象怎么设计&#xff1f; 7、get、post区别&#xff0c;使用场景&…

已解决ModuleNotFoundError : No module named ‘pandas亲测有效!!!

已解决ModuleNotFoundError : No module named ‘pandas亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 报错问题解决思路解决方法 报错问题 在运行Python代码时&#xff0c;你可能会遇到以下报错信息&#xff1a; ModuleNotFoundError: No module named pandas这个…

华为昇腾310B初体验,OrangePi AIpro开发板使用测评

0、写在前面 很高兴收到官方的OrangePi AIpro开发板测试邀请&#xff0c;在过去的几年中&#xff0c;我在自己的博客写了一系列有关搭载嵌入式Linux系统的SBC&#xff08;单板计算机&#xff09;的博文&#xff0c;包括树莓派4系列、2K1000龙芯教育派、Radxa Rock5B、BeagleBo…

攒粒是什么?怎么用攒粒赚钱?

攒粒简介 攒粒的前身是91问问&#xff0c;隶属于上海道道永泉市场调查有限公司&#xff0c;是一家专业的全球在线调研服务公司&#xff0c;也是是国内排名前列的社区调查之一&#xff0c;10年在线调研&#xff0c;600万会员亲身体验&#xff0c;提供网络调查、市场调查、问卷调…

KT6368A蓝牙芯片AT命令会被透传出去,指令对为什么会被透传出去

一、简介 KT6368A再被连接之后&#xff0c;AT命令会被透传出去。被透传的这组AT命令是符合文档要求&#xff0c;不应被透传&#xff0c;实际却经常被透传。并且可以每次都复现 详细描述 有问题部分的串口数据监控结果如下&#xff1a;其中41 54 2B 42 4D 46 30 41 46 42 43 3…

从零自制docker-15-【实现 mydocker run -d 支持后台运行容器】

文章目录 实现目的莫名奇妙的问题对之前upper层出现root补充对run某些命令出现找不到文件或目录的原因代码效果 实现目的 docker run -d时容器在后台运行&#xff0c;而不会进入命令行交互形式 首先是需要添加-d选项然后设置当添加-d选项时候主进程不会等待子进程&#xff0c…

生意人【变通 VS 正常 、先义后利、正确的反省法】

冷 VS 热 冷&#xff1a;慢慢吞吞 热&#xff1a;见面热络 有钱大家花&#xff0c;越花越多 对什么的人也要讲什么样的话 获取的两种方式&#xff1a;变通 VS 正常 变通有变通的方式正常有正常的轨道 不敢做而来骂他说你不做、话不说满&#xff0c;人不自夸 先义后利…

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接&#xff1a;Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处…