Java 面向对象编程(OOP)

面向对象编程(Object-Oriented Programming,OOP)是Java编程语言的核心思想之一。通过OOP,Java提供了一种结构化的编程方式,使代码更易于维护和扩展。

一、类和对象

1. 类的定义

类是对象的蓝图或模板,定义了对象的属性和行为。一个类通常包含字段(变量)和方法(函数)。下面是一个简单的Java类示例:

public class Person {// 字段String name;int age;// 构造方法public Person(String name, int age) {this.name = name;this.age = age;}// 方法public void display() {System.out.println("Name: " + name + ", Age: " + age);}
}

2. 对象的创建

对象是类的实例,通过类的构造方法来创建对象。使用 new 关键字可以创建一个新的对象:

Person person = new Person("Alice", 30);
person.display();  // 输出:Name: Alice, Age: 30

3. 对象的属性和方法

对象的属性是通过类中的字段定义的,对象的行为是通过类中的方法定义的。可以通过对象访问其属性和方法:

Person person = new Person("Bob", 25);
person.name = "Bob";
person.age = 25;
person.display();  // 输出:Name: Bob, Age: 25

二、继承

继承是OOP的一个重要特性,允许一个类继承另一个类的属性和方法,从而实现代码的重用。被继承的类称为父类(或基类),继承的类称为子类(或派生类)。

1. 继承的实现

在Java中,使用 extends 关键字来实现继承:

public class Employee extends Person {// 新增字段String company;// 构造方法public Employee(String name, int age, String company) {super(name, age);  // 调用父类的构造方法this.company = company;}// 新增方法public void display() {super.display();  // 调用父类的方法System.out.println("Company: " + company);}
}

2. 方法重写

子类可以重写(Override)父类的方法,以提供特定的实现。重写的方法必须具有相同的方法签名(方法名、参数类型和返回类型):

public void display() {super.display();  // 调用父类的方法System.out.println("Company: " + company);
}

3. 多层继承

Java支持单继承,即一个类只能有一个直接父类,但可以通过多层继承实现复杂的继承关系:

public class Manager extends Employee {String department;public Manager(String name, int age, String company, String department) {super(name, age, company);this.department = department;}public void display() {super.display();System.out.println("Department: " + department);}
}

三、多态

多态性是OOP的核心概念之一,指同一个方法调用由于对象不同会表现出不同的行为。多态性主要通过方法重写和接口实现。

1. 方法重写

方法重写是实现多态性的一个方式,子类重写父类的方法,使得相同的方法调用在不同的对象上表现出不同的行为:

Person person = new Employee("Charlie", 28, "Tech Corp");
person.display();  // 调用的是 Employee 类的 display 方法

2. 接口实现

接口定义了一组方法,任何类都可以实现这些接口,从而保证一定的行为。接口的多态性通过接口引用来实现:

interface Printable {void print();
}class Document implements Printable {public void print() {System.out.println("Printing document...");}
}class Photo implements Printable {public void print() {System.out.println("Printing photo...");}
}public class Main {public static void main(String[] args) {Printable p1 = new Document();Printable p2 = new Photo();p1.print();  // 输出:Printing document...p2.print();  // 输出:Printing photo...}
}

四、封装

封装是指将对象的属性和方法私有化,通过公共的访问方法(getter 和 setter)来访问和修改属性。封装提高了代码的安全性和可维护性。

1. 封装的实现

通过将字段声明为 private,并提供 public 的 getter 和 setter 方法来实现封装:

public class BankAccount {// 私有字段private double balance;// 构造方法public BankAccount(double balance) {this.balance = balance;}// Getter 方法public double getBalance() {return balance;}// Setter 方法public void deposit(double amount) {if (amount > 0) {balance += amount;}}public void withdraw(double amount) {if (amount > 0 && amount <= balance) {balance -= amount;}}
}

2. 访问和修改属性

通过 getter 和 setter 方法来访问和修改私有属性:

BankAccount account = new BankAccount(1000);
account.deposit(500);
account.withdraw(200);
System.out.println("Balance: " + account.getBalance());  // 输出:Balance: 1300

五、抽象

抽象是OOP的另一重要特性,通过抽象类和接口来实现。抽象类不能实例化,只能被继承;接口定义一组方法,任何类都可以实现这些方法。

1. 抽象类

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

abstract class Animal {// 抽象方法public abstract void makeSound();// 具体方法public void sleep() {System.out.println("Sleeping...");}
}class Dog extends Animal {public void makeSound() {System.out.println("Woof");}
}

2. 抽象方法的实现

子类必须实现抽象类中的所有抽象方法:

Dog dog = new Dog();
dog.makeSound();  // 输出:Woof
dog.sleep();  // 输出:Sleeping...

3. 接口

接口是一组方法的声明,任何类都可以实现接口,并提供接口方法的具体实现:

interface Flyable {void fly();
}class Bird implements Flyable {public void fly() {System.out.println("Bird is flying");}
}class Plane implements Flyable {public void fly() {System.out.println("Plane is flying");}
}

4. 接口实现的多态性

接口的多态性通过接口引用来实现:

Flyable f1 = new Bird();
Flyable f2 = new Plane();f1.fly();  // 输出:Bird is flying
f2.fly();  // 输出:Plane is flying

六、组合与聚合

组合和聚合是面向对象设计中的两个重要概念,表示对象之间的关系。

1. 组合

组合表示一个对象由多个部分组成,是一种强依赖关系。如果整体被销毁,部分也会被销毁:

class Engine {// 引擎的实现
}class Car {private Engine engine;public Car() {engine = new Engine();  // 组合关系,Car 创建时创建 Engine}
}

2. 聚合

聚合表示一个对象包含另一个对象,是一种弱依赖关系。如果整体被销毁,部分可以独立存在:

class Library {private List<Book> books;public Library(List<Book> books) {this.books = books;  // 聚合关系,Library 包含 Book}
}

Java的面向对象编程通过类和对象、继承、多态、封装和抽象等概念,使得代码更加模块化、可维护和可扩展。理解和掌握这些概念是成为一名优秀Java开发者的关键。通过实践和项目经验,能够更好地应用这些OOP原则,编写出高质量的Java代码。

黑马程序员免费预约咨询

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

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

相关文章

File name ‘xxxx‘ differs from already included file name ‘xxxx‘ only in casing.

一、报错信息 VSCode报错如下&#xff1a; File name ‘d:/object/oral-data-management/src/components/VisitLogPopup/Info.vue’ differs from already included file name ‘d:/object/oral-data-management/src/components/VisitLogPopup/INfo.vue’ only in casing. The…

【PostgreSQL17新特性之-事务级别超时参数transaction_timeout】

PostgreSQL数据库里有多个和会话相关的参数&#xff0c;PostgreSQL17-beta1版本新增了一个transaction_timeout参数&#xff0c;来限制事务的持续时间。 当前的一些和会话相关的超时参数如下 -----------------------------------------------------------------------------…

第一讲:单片机STC89C52+RA8889驱动控制彩屏(源码公开)

51单片机驱动控制彩屏系列讲座 第一讲&#xff1a;单片机STC89C52RA8889驱动控制彩屏&#xff08;源码公开&#xff09; 单片机通过SPI与RA8889进行通信&#xff0c;由于单片机是5V&#xff0c;RA8889是3.3V,故需要进行电平转换&#xff0c;有现成的模组TXS0108E等可以采用。…

linux开放某一个端口具体步骤

场景&#xff1a;当服务器防火墙不能直接关闭&#xff0c;但是客户端必须要访问服务器某一个端口时。 处理&#xff1a;对服务器端进行处理&#xff0c;只将该端口开放出来让客户端访问 本地使用vm安装了一个centos服务器&#xff0c;ip地址是 192.168.200.130。在这里充当服…

Kafka原生API使用Java代码-生产者-异步发送消息回调

文章目录 1、异步发送消息&回调1.1、pom.xml1.2、KafkaProducer1.java 1、异步发送消息&回调 回调就是接收kafka的响应 1.1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0&q…

Android Studio无法改变Button背景颜色解决办法

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天我来和大家探讨一个在Android开发中常见但可能让初学者感到困惑的问题——如何在Android Studio中改变Button的背景颜色。这个问题看似简单&#xff0c;但实际操作中可能会遇到一些意想不到的挑战。接下来&#xff0c;我将从多个…

Facebook:社交世界的接口

在当今数字时代&#xff0c;社交媒体已经成为了人们生活中不可或缺的一部分&#xff0c;而Facebook作为其中的巨头之一&#xff0c;扮演着至关重要的角色。本文将带您深入探索Facebook这张社交世界的画卷&#xff0c;全面了解这个令人着迷的平台。 起源与历程 Facebook的故事始…

AI虚拟试穿革命:I2VEdit技术引领电商视频内容创新

在当今快速迭代的电子商务领域,用户体验与内容创新是企业竞争力的核心要素。随着AI技术的飞速进步,AI虚拟试穿已不再局限于静态图像,而是迈向了动态视频的新纪元。本文将深入解析一项革新性技术——I2VEdit,如何以其独到之处,为电商尤其是服装零售行业带来一场内容创作与产…

JVM学习-字节码指令集(二)

对象的创建与访问指令 创建指令 虽然类实例和数组都是对象&#xff0c;但Java虚拟机对类实例和数组的创建和操作使用了不同的字节码指令创建类实例指令&#xff1a;new 它接收一个操作数&#xff0c;指向常量池的索引&#xff0c;表示要创建的类型&#xff0c;执行完成后&am…

重磅发布,2024精选《制造业商业智能BI最佳实践合集 》

在数字时代&#xff0c;中国制造业正面临着前所未有的深刻变革。 商业环境的复杂性与多变性、全球化竞争的激烈程度、消费需求的快速演变&#xff0c;以及新技术的持续进步等多种因素共同推动着制造企业积极加入数字化转型的潮流。 在这个转型的过程中&#xff0c;转型的速度…

Java设计模式 _行为型模式_备忘录模式

一、备忘录模式 1、备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型模式。通过保存一个对象的某个状态&#xff0c;以便在适当的时候恢复对象。 2、实现思路 &#xff08;1&#xff09;、定义记录数据的格式规范。 &#xff08;2&#xff09;、编…

pyqt Qtreeview分层控件

pyqt Qtreeview分层控件 介绍效果代码 介绍 QTreeView 是 PyQt中的一个控件&#xff0c;它用于展示分层数据&#xff0c;如目录结构、文件系统等。QTreeView 通常与模型&#xff08;如 QStandardItemModel、QFileSystemModel 或自定义模型&#xff09;一起使用&#xff0c;以管…

WAF几种代理模式详解

WAF简介 WAF的具体作用就是检测web应用中特定的应用&#xff0c;针对web应用的漏洞进行安全防护&#xff0c;阻止如SQL注入&#xff0c;XSS&#xff0c;跨脚本网站攻击等 正向代理 WAF和客户端与网络资源服务器都建立连接&#xff0c;但是WAF 的工作口具有自己的 IP 地址&…

oracle数据回显时候递归实战

太简单的两篇递归循环 orcale 在项目里递归循环实战 先看资产表T_ATOM_ASSET结构 看业务类别表T_ATOM_BUSI_CATEGORY结构 问题出现 页面显示 实际对应的归属业务分类 涉及到oracle递归实战(这里不会如何直接在atomAsset的seelct里面处理递归回显) 直接在实现层看atomAs…

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

因客户要求zynq开发板只有FLASH和emmc&#xff0c;然而还得在petalinux进行开发系统&#xff0c;因FLASH大小有限&#xff0c;所以没办法把内核和根文件地址全部存储到FLASH中&#xff0c;于是想配合emmc进行启动&#xff0c;但是在网上搜索的大多都是只把根文件系统放到了emmc…

Leetcode - 131双周赛

一&#xff0c;3158. 求出出现两次数字的 XOR 值 本题是一道纯模拟题&#xff0c;直接暴力。 代码如下&#xff1a; class Solution {public int duplicateNumbersXOR(int[] nums) {int ans 0;long t 0;for(int x : nums){if(((t>>x)&1) 1){ans ^ x;}else{t | (…

U-Net网络

U-Net网络 一、基本架构 各个箭头的解释&#xff1a; conv 3 * 3, ReLU&#xff1a;表示通过一个3 * 3的卷积层&#xff0c;并且该层自动附带一个非线性激活层&#xff08;ReLu&#xff09;copy and crop&#xff1a;表示进行裁剪然后再进行拼接&#xff08;在channel的维度上…

【CALayer-时钟练习-CADisplayLink Objective-C语言】

一、我们接着来看,这个CADisplayLink啊, 1.刚才我们说那个时间呢,差上1秒钟的样子,然后呢,我们现在呢,用这个叫做CADisplayLink的东西,来解决,用这个类,来解决啊, 我们说,NSTimer,是跑到这儿了以后,一秒钟以后, 它才会执行,这个timeChange方法,真正的时间,不…

AWS 高防和阿里云高防深度对比

随着网络攻击的不断增加&#xff0c;企业对于网络安全的需求也越来越高。在这种情况下&#xff0c;高防护服务成为了企业网络安全的重要组成部分。AWS和阿里云作为全球领先的云计算服务提供商&#xff0c;都提供了高防护服务&#xff0c;但它们之间存在着一些差异。我们九河云一…

基于PTP实现主机与相机系统时钟同步功能

基于PTP实现主机与相机系统时钟同步功能 一、PTP简介二、工业相机PTP功能支持三、工业相机时间戳介绍3.1基本概念3.2海康工业相机时间戳介绍3.2.1相机参数时间戳3.2.2图像嵌入式时间戳3.2.3相机event事件时间戳3.2.4各种时间戳的时序关系3.2.5通过工业相机SDK获取相机时间戳 四…