如何理解 Java 类和对象

Java 中的类和对象是学习 Java 编程的基础之一。类是 Java 中的核心概念之一,它提供了一种组织和封装数据以及相关行为的方式。对象是类的实例,它是在运行时创建的,具有特定的状态和行为。

类和对象的概念

1. 类(Class)

类是一种抽象数据类型,用于描述具有相似特征和行为的对象的集合。在 Java 中,类是由属性(字段)和方法(函数)组成的。属性表示对象的状态或数据,而方法表示对象的行为或操作。

2. 对象(Object)

对象是类的实例,它是在程序运行时创建的。每个对象都具有一组属性,这些属性的值可以在对象的生命周期中被读取和修改。对象还可以执行类中定义的方法,以完成特定的任务或操作。

3. 类和对象的关系

类定义了对象的结构和行为,而对象是类的具体实例。在 Java 中,可以根据类来创建多个对象,每个对象都有自己的状态和行为,但是它们共享同一个类的结构和行为。

定义类

在 Java 中,可以使用关键字 class 来定义一个类。类定义包括类的名称、类的属性和方法。下面是一个简单的类的定义示例:

public class Person {
    // 属性
    private String name;
    private int age;
    
    // 方法
    public void setName(String name) {
        this.name = name;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
    
    public void displayInfo() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

在上面的例子中,Person 类有两个属性 nameage,以及三个方法 setNamesetAgedisplayInfo。属性被声明为私有的,这意味着它们只能在类的内部访问,而方法是公有的,可以被其他类访问。

创建对象

要使用类,需要先创建该类的对象。在 Java 中,可以使用 new 关键字来创建对象,并使用构造函数对对象进行初始化。下面是创建 Person 类对象的示例:

public class Main {
    public static void main(String[] args) {
        // 创建 Person 对象
        Person person1 = new Person();
        
        // 设置对象的属性
        person1.setName("Alice");
        person1.setAge(30);
        
        // 调用对象的方法
        person1.displayInfo();
    }
}

在上面的例子中,首先创建了一个 Person 类的对象 person1,然后通过调用对象的 setNamesetAge 方法来设置对象的属性,最后调用 displayInfo 方法来显示对象的信息。

构造函数

构造函数是一种特殊类型的方法,用于在对象被创建时进行初始化。在 Java 中,类可以定义一个或多个构造函数,如果没有显式地定义构造函数,则会使用默认的构造函数。下面是一个带有构造函数的 Person 类的例子:

public class Person {
    private String name;
    private int age;
    
    // 构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // 其他方法...
}

在上面的例子中,定义了一个带有两个参数的构造函数,用于初始化 nameage 属性。当创建 Person 对象时,可以传入参数来调用这个构造函数,从而初始化对象的属性。

封装性

封装是面向对象编程的核心概念之一,它指的是将数据和操作封装在类的内部,并对外部提供公有的方法来访问和修改数据。在 Java 中,可以使用访问修饰符(如 publicprivateprotected)来控制类的成员的可见性。通常,属性被声明为私有的,而方法被声明为公有的,以实现封装性。例如:

public class Person {
    private String name;
    private int age;
    
    // setName 方法是公有的,可以在外部访问和修改 name 属性
    public void setName(String name) {
        this.name = name;
    }
    
    // setAge 方法是公有的,可以在外部访问和修改 age 属性
    public void setAge(int age) {
        this.age = age;
    }
    
    // displayInfo 方法是公有的,用于显示对象的信息
    public void displayInfo() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

在上面的例子中,nameage 属性被声明为私有的,而 setNamesetAgedisplayInfo 方法被声明为公有的,这样外部类就可以通过调用这些方法来访问和修改对象的属性,而不需要直接访问属性。

继承

继承是面向对象编程中另一个重要的概念,它允许一个类继承另一个类的属性和方法。在 Java 中,可以使用 extends 关键字来实现继承。例如:

public class Student extends Person {
    private String studentId;
    
    public Student(String name, int age, String studentId) {
        super(name, age); // 调用父类的构造函数
        this.studentId = studentId;
    }
    
    // 其他方法...
}

在上面的例子中,Student 类继承了 Person 类,它拥有 Person 类的所有属性和方法,并可以添加自己的属性和方法。在 Student 类的构造函数中使用 super 关键字调用父类的构造函数,以初始化继承自父类的属性。

多态

多态是面向对象编程的另一个重要概念,它允许一个方法在不同的类中具有不同的实现。在 Java 中,可以通过方法重写(override)和方法重载(overload)来实现多态。例如:

public class Animal {
    public void sound() {
        System.out.println("Animal makes a sound");
    }
}

public class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}

public class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("Cat meows");
    }
}

在上面的例子中,Animal 类定义了一个 sound 方法,而 Dog 类和 Cat 类分别重写了 sound 方法,以实现狗吠和猫叫的不同行为。当调用 sound 方法时,会根据对象的实际类型来确定调用哪个实现。

在 Java 中,类和对象是面向对象编程的基础,它们提供了一种组织和封装代码的方式。类定义了对象的结构和行为,而对象是类的具体实例,它具有特定的状态和行为。通过封装、继承和多态等特性,可以更好地组织和管理代码,提高代码的重用性和可维护性。

黑马程序员免费预约咨询

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

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

相关文章

访问构造方法(反射)

文章目录 前言一、反射是什么?二、访问构造方法 1.Constructor对象的获取方法2.Constructor方法的使用总结 前言 Java的反射机制可以实现访问、检测和修改Java对象本身信息的功能,在java.lang.reflect包下提供此功能。可以使程序员更加深入地控制程序的运…

缓存降级

当Redis缓存出现问题或者无法正常工作时,需要有一种应对措施,避免直接访问数据库而导致整个系统瘫痪。缓存降级就是这样一种机制。 主要的缓存降级策略包括: 本地缓存降级 当Redis缓存不可用时,可以先尝试使用本地进程内缓存,如Guava Cache或Caffeine等。这样可以减少对Redis…

如何在工信部教考中心官网查询PG证书

1.第一步:进入工业和信息化部教育与考试中心官网 2.第二步:点击最右边“证书查询” 3.点击“工业和信息化部教育与考试中心培训评价证书查询” 4.在该页面按照如下方式进行证书查询:输入您的证件号码和您的证书号码以及姓名,点…

十四天学会Vue——Vue核心(理论+实战)中篇(第二天)

声明:是接着上篇讲的哦,感兴趣可以去看一看~ 这里一些代码就不写了,为了缩减代码量,大家知道就可以了: Vue.config.productionTip false //阻止 vue 在启动时生成生产提示。热身小tips,可以安装这个插件&…

免费wordpress中文主题

免费大图wordpress主题 首页是一张大图的免费wordpress主题模板。简洁实用,易上手。 https://www.jianzhanpress.com/?p5857 免费WP模板下载 顶部左侧导航条的免费WP模板,后台简洁,新手也可以下载使用。 https://www.jianzhanpress.com/…

idea改了代码,但是需要紧急切换分支,需要把改动的保存到本地

但是如果有冲突,你没有合并,那也会丢哦! 改完那个分支,回到这个分支然后弹出来再。

WGCLOUD使用下发指令重启安卓设备

wgcloud的下发命令很好使,可以下发很多命令,最好的是可以选择很多主机同时下发命令 这里我想重启下我的安卓设备,只需要下发一个命令: bash reboot 就好啦 如下图

微信公众号完成自动回复,自定义菜单

微信公众号完成自动回复,自定义菜单 首先要获取到微信公众号的开发者权限,这一步省略,可以自行百度 微信公众号对接自己的服务器 首先第一步需要有自己的服务器和固定的ip, 其中,80/443端口需要有其中一个&#xff0…

按尺寸筛选轮廓图中的轮廓

1.按短边筛选 原始轮廓图: import cv2 import numpy as np# 读取轮廓图 contour_image cv2.imread(..\\IMGS\\pp_edge.png, cv2.IMREAD_GRAYSCALE)# 使用cv2.findContours()函数获取所有轮廓 contours, _ cv2.findContours(contour_image, cv2.RETR_EXTERNAL, cv2…

据阿谱尔APO Research调研显示,2023年全球绝缘栅双极晶体管(IGBT)市场销售额约为89.9亿美元

根据阿谱尔 (APO Research)的统计及预测,2023年全球绝缘栅双极晶体管(IGBT)市场销售额约为89.9亿美元,预计在2024-2030年预测期内将以超过14.7%的CAGR(年复合增长率)增长。 由于各行业对电力电子…

XSKY CTO 在英特尔存储技术峰会的演讲:LLM 存储,架构至关重要

5 月 17 日,英特尔存储技术峰会在北京顺利举办。作为英特尔长期的合作伙伴,星辰天合受邀参加了此次峰会。星辰天合 CTO 王豪迈作为特邀嘉宾之一,作了主题为《LLM 存储:架构至关重要》的演讲,分享了大语言模型&#xff…

jmeter发送webserver请求和上传请求

有时候在项目中会遇到webserver接口和上传接口的请求,大致参考如下 一、发送webserver请求 先获取登录接口的token,再使用cookie管理器进行关联获取商品(webserver接口),注意参数一般是写在消息体数据中,消息体有点像HTML格式 执…

Java整合EasyExcel实战——2 导出复杂表头

详情代码 实体类 Data public class ComplexHeadData {ExcelProperty({"主标题", "字符串标题"})private String string;ExcelProperty({"主标题", "日期标题"})private Date date;ExcelProperty({"主标题", "数字标…

(2024,DDDM,ODE,少量步生成,迭代生成)直接去噪扩散模型

Directly Denoising Diffusion Model 公众号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. 直接去噪扩散模型 3.1. 迭代求解 4. Psuedo-LPIPS 指标 5. 实验 7. 讨论和局限性 0. 摘…

大模型时代的具身智能系列专题(二)

李飞飞团队 李飞飞是华人在AI领域最具影响力的学者之一,她是斯坦福大学人工智能实验室(SAIL)教授,美国国家工程院院士,知名CV数据集ImageNet的牵头人,斯坦福视觉与学习实验室(SVL)的…

2024.05.27学习记录

1、面经复习: 实际工作经验章节 2、代码随想录刷题:动态规划剩下部分和单调栈 3、rosebush 组件库完成Input 和 AutoComplete部分内容

长难句打卡5.27

In fact, allowing non-lawyers to own shares in law firms would reduce costs and improve services to customers, by encouraging law firms to use technology and to employ professional managers to focus on improving firms’efficiency. 事实上,这通过…

can设备调试 - linux driver

这篇文章主要介绍can设备的调试相关信息,不具体介绍驱动的实现。 如果驱动写完,对can设备进行验证,可能会出现很多不可预见的问题。下面说说验证步骤 验证can设备可以使用工具can-utils。这个工具包中会有cansend candump等程序。可以直接通…

视频监控技术前沿探索:智能化趋势与EasyCVR视频汇聚技术应用

在数字化时代的浪潮中,视频监控技术以其独特的优势,正在安防领域书写着新的篇章。它不仅为公共安全部门提供了强大的技术支持,还深入到教育、政府、娱乐、医疗、酒店、运动等多个领域,成为维护社会秩序、保障人民安全的重要工具。…

python爬虫学习(2)——requests模块

520那天我向心仪的女孩要微信:“女神,能给我你的微信号吗?” 女神:“给我——爬!!!!” 从那天开始,我就决定要学好爬虫,爬到女神微信号!&#xff…