Java从入门到精通-类和对象(一)

news2025/1/23 22:34:39

0. 类和对象

1. 面向对象概述

Java面向对象编程(Object-Oriented Programming,OOP)是一种强大的编程范式,它基于对象、类、封装、继承和多态等核心概念。这种编程范式使得代码更加模块化、可维护、可重用和可扩展。

1.1 对象和类

在Java中,一切都是对象。对象是程序中的基本单位,它代表现实世界中的实体或概念。例如,我们可以考虑一个简单的汽车对象:

class Car {
    String color;
    int speed;
    
    void start() {
        System.out.println("汽车启动了!");
    }
    
    void accelerate() {
        System.out.println("汽车加速中...");
    }
}

在示例中,我们定义了一个名为Car的类,它具有颜色(color)和速度(speed)这两个属性,以及两个方法(start()accelerate())。这个类描述了汽车的特征和行为。

1.2 封装

封装是OOP的一个关键概念,它指的是将数据和方法封装在类内部,以保护数据的安全性。只有类的方法可以访问和修改类的数据,外部代码无法直接访问或修改数据。这提高了代码的可维护性和安全性。让我们看一个封装的示例:

class BankAccount {
    private double balance;
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
    
    public double getBalance() {
        return balance;
    }
}

在示例中,balance属性被声明为private,这意味着只有BankAccount类的方法才能访问它。外部代码必须通过公共方法(deposit()getBalance())来操作和获取账户余额。

1.3 继承

继承是OOP的另一个关键概念,它允许一个类(子类/派生类)继承另一个类(父类/基类)的属性和方法。子类可以重用父类的代码,并且可以添加自己的特定属性和方法。这有助于代码重用和建立层次化结构。示例如下:

class Animal {
    void eat() {
        System.out.println("动物吃东西");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("狗在叫");
    }
}

在示例中,Animal类定义了eat()方法,而Dog类继承了Animal类,并添加了自己的bark()方法。这使得Dog类既可以调用eat()方法,也可以调用bark()方法。

1.4 多态

多态是OOP的另一个强大概念,它允许不同类的对象对相同的消息(方法调用)作出不同响应。多态允许对象根据其实际类型执行不同的行为。示例如下:

class Shape {
    void draw() {
        System.out.println("绘制形状");
    }
}

class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("绘制圆形");
    }
}

class Square extends Shape {
    @Override
    void draw() {
        System.out.println("绘制正方形");
    }
}

在示例中,Shape类定义了draw()方法,而CircleSquare类都继承了Shape类并重写了draw()方法。这意味着可以创建ShapeCircleSquare对象,并调用它们的draw()方法,它们会根据实际类型执行不同的绘制行为。

2. 类

类是面向对象编程的基本构建块之一。类定义了对象的结构和行为。让我们深入了解类的概念,包括成员变量、成员方法、权限修饰符、局部变量、局部变量的有效范围、this关键字以及类的构造方法。

2.1 类的基本结构

一个类的基本结构通常包括以下部分:

public class ClassName {
    // 成员变量(属性)
    dataType variable1;
    dataType variable2;
    
    // 构造方法
    public ClassName(parameters) {
        // 构造方法的初始化代码
    }
    
    // 成员方法
    returnType methodName(parameters) {
        // 方法体
    }
    
    // 其他成员方法
}

1. 成员变量(属性):

  • 成员变量是类的属性,用于存储对象的状态信息。
  • 定义了类的特征或数据。

2. 构造方法:

  • 构造方法是一个特殊的方法,用于初始化对象的属性。
  • 在创建对象时自动调用,通常用于执行必要的初始化操作。
  • 构造方法的名称与类名相同。

3. 成员方法:

  • 成员方法定义了对象可以执行的操作。
  • 定义了类的行为或操作。

2.2 成员变量

成员变量是类的属性,它们用于存储对象的状态信息。在类中声明成员变量时,可以使用不同的权限修饰符,如privatepublicprotected等,以控制其可访问性。例如:

public class Student {
    // 成员变量
    public String name; // 公共成员变量
    private int age;    // 私有成员变量
    protected double gpa; // 受保护的成员变量
}

2.3 构造方法

构造方法是用于初始化对象的特殊方法。每个类可以有一个或多个构造方法,根据不同的参数列表进行重载。构造方法的名称必须与类名相同,它没有返回值。

public class Student {
    private String name;
    private int age;

    // 构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

在示例中,Student类有一个构造方法,接受姓名和年龄作为参数,用于初始化学生对象的属性。

2.4 成员方法

成员方法定义了对象可以执行的操作。它们用于定义类的行为或操作。成员方法的声明包括返回类型、方法名、参数列表和方法体。

public class Calculator {
    // 成员方法:加法
    public int add(int num1, int num2) {
        return num1 + num2;
    }

    // 成员方法:除法
    public double divide(double dividend, double divisor) {
        if (divisor != 0) {
            return dividend / divisor;
        } else {
            System.out.println("除数不能为零");
            return Double.NaN; // 返回NaN表示不是一个数字
        }
    }
}

在示例中,Calculator类定义了两个成员方法,add()divide(),分别用于执行加法和除法操作。

2.5 权限修饰符

Java提供了不同的权限修饰符,用于控制成员变量和成员方法的可访问性:

  • public:可以在任何地方访问。
  • private:只能在类内部访问。
  • protected:只能在同一包内或子类中访问。
  • 默认(无修饰符):只能在同一包内访问。

2.6 局部变量和有效范围

局部变量是在方法或代码块内部声明的临时变量。它们的作用域仅限于声明它们的代码块内部。例如:

public class Example {
    public void someMethod() {
        int x = 10; // 局部变量,只能在someMethod()方法内部访问
    }
}

2.7 this关键字

this关键字用于引用当前对象的引用。它可以用于区分成员变量和局部变量,特别是在成员方法中。例如:

public class Person {
    private String name;

    public void setName(String name) {
        // 使用this关键字来引用成员变量
        this.name = name;
    }
}

在示例中,使用this.name来引用成员变量,以区分成员变量和方法参数的name

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

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

相关文章

线性代数的学习和整理20,关于向量/矩阵和正交相关,相似矩阵等(草稿)

目录 1 什么是正交 1.1 正交相关名词 1.2 正交的定义 1.3 正交向量 1.4 正交基 1.5 正交矩阵的特点 1.6 正交矩阵的用处 1 什么是正交 1.1 正交相关名词 orthogonal set 正交向量组正交变换orthogonal matrix 正交矩阵orthogonal basis 正交基orthogonal decompositio…

Kafka源码分析之网络通信

1、生产者网络设计 架构设计图 2、生产者消息缓存机制 1、RecordAccumulator 将消息缓存到RecordAccumulator收集器中, 最后判断是否要发送。这个加入消息收集器,首先得从 Deque 里找到自己的目标分区,如果没有就新建一个批量消息 Deque 加进入 2、消…

BUUCTF reverse1 1

使用die发现是64位程序 我们先运行一下 这里说错误的flag 使用IDA64位程序打开 shift F12 打开字符串窗口 查找 wrong flag 双击这个字符串 双击 sub_1400118C0C8↑o 这里跳跃到了汇编窗口, F5 反汇编 sub_1400111D1("input the flag:");sub_14001…

2024浙大MBA提面优秀经历分享:小微创客的小确幸

今年5月份我参加了浙大MBA创客班的提前批面试,目前浙大杭州这边还剩下最后一个批次也就是在10月份。最近身边也有很多朋友都在问关于提面的情况,趁今天比较空,我想借此机会与大家分享一下我的经验,希望对后续参加浙大MBA提前面试的…

重庆成都游记

大家好,我是煎鱼。 上周找了个时间去了重庆成都,现在马上国庆了,做个记录也分享给大家参考一下。 总体来讲,还是很好吃的。有些地标也是有一定的打卡、体验价值。 重庆-李子坝处拍 重庆 重庆的景点比较集中,都在那一圈…

【图像识别】图像特征、特征检测、特征提取

目录 1. 图像特征 2. 特征检测与特征提取 2.1 特征检测算法 2.2.1Moravec 2.1.2 Harris 2.1.3 FAST 2.1.4 SIFT 2.1.5 SURF 2.1.6 BRIRF 2.1.7 ORB 2.2 特征提取算法 2.2.1 HOG 2.2.2 Harr 2.2.3 SIFT 2.2.4 LBP 2.2.5 Gabor 2.3 边缘检测算法 3 算法对比 1. …

安卓多渠道打包(五)360加固walle多渠道打包

背景: 1、360加固宝,签名收費了,脚本上传加固也针对特定帐号才可实现。 内容 本文将会分享安卓项目中,使用360加固,再用walle签名,产出多渠道加固包的全流程。 环境 win10 jdk11 as2022 gradle7.5 最…

vue3+emelenui实现前端分页功能—最简单

在一些后台管理系统或者博客管理系统中分页功能是很常见的一种服务,因为总不可能把很多数据放在一块,那样阅读起来很麻烦,所以需要分页。也是前后端中最为常见的一个功能 先看一下分页场景的模拟。 首先我们要去后端写点数据通过接口给前端&a…

ssm实现折线统计图

​ 方法1&#xff1a;单张数据表中的数据图表生成 图表统计&#xff0c;查看部门人数统计这里实现的时单张表中的数据实现部门人数折线统计图展示。 <script type"text/javascript">// 利用AjAx来获取后台传入的数据&#xff08;Responsebody注解传入的&…

日志平台搭建第五章:Linux安装Kafka

相关链接 http://kafka.apache.org/downloads 1.使用Docker安装zookeeper 下载镜像&#xff1a; docker pull zookeeper:3.4.14 创建容器&#xff1a; docker run --name zookeeper \ -v /opt/data/zksingle:/data \ -p 2181:2181 \ -e ZOO_LOG4J_PROP"INFO,ROLLINGFILE&q…

日志平台搭建第六章:logstash通过kafka通道采集日志信息

1.修改文件/opt/app/elk/logstash-7.5.1/config.d/config1.conf&#xff0c;在input下添加kafka采集配置 #192.168.128.130:9103:kafka地址 #topics:主题 kafka {bootstrap_servers > ["192.168.128.130:9103"]group_id > "logstash"topics > [&…

基于NAND存储的双分区OTA升级方案

系统启动&#xff1a;UBOOT--->KERNEL--->ROOTFS 分区分布&#xff1a;A1A2B1B2C1C2D结构&#xff1b; A1B1C1D为一组启动序列&#xff1b; A2B2C2D为另外 一组启动序列&#xff1b; 下面介绍一下有后悔药式的升级方案&#xff1a; 1.1 通过curl从服务器下载升级包…

电脑提示msvcp110.dll是什么意思?msvcp110.dll丢失修复办法分享

当我们使用电脑时&#xff0c;有时候会出现一些错误提示&#xff0c;其中就包括了“msvcp110.dll 丢失”的提示。那么&#xff0c;这个提示是什么意思呢&#xff1f;电脑提示找不到msvcr110.dll怎么办&#xff0c;我们在使用电脑的时候&#xff0c;总是会遇到很多的电脑难题。当…

python趣味编程-数独游戏

数独游戏是一个用Python编程语言编写的应用程序。该项目包含可以显示实际应用程序的基本功能。该项目可以让修读 IT 相关课程并希望开发简单应用程序的学生受益。这个Python 数独游戏是一个简单的项目,可用于学习tkinter库的实践。这个数独游戏可以提供Python编程的基本编码技…

PPT 生成整数序列字典序的r-组合算法

生成整数序列字典序的r-组合算法 一、PPT效果展示二、问题2.1 简述2.2 算法简述2.3 例子 三、PPT实现 一、PPT效果展示 二、问题 2.1 简述 给定一个整数序列 (1&#xff0c;2&#xff0c;3&#xff0c;…n)&#xff0c;输出其所有字典序的r-组合&#xff0c;注意事项&#xf…

KT142C-sop16语音芯片ic的功耗详细说明_实测_以及功耗机制

KT142C是一个提供串口的SOP16语音芯片&#xff0c;完美的集成了MP3的硬解码。内置330KByte的空间&#xff0c;最大支持330秒的语音长度&#xff0c;支持多段语音&#xff0c;支持直驱0.5W的扬声器无需外置功放 其中KT142C芯片的&#xff0c;功耗表现还是非常的好。芯片工作的时…

Vue中对于指令的介绍

Vue指令 文章目录 Vue指令1、介绍2、指令介绍2.1、v-html2.2、v-show和v-if3.2、v-else 和 v-else-if3.3、v-on3.4、v-bind3.5、v-for3.6、v-for 中的key3.7、v-model 3、指令修饰符3.1、 按键修饰符3.2、 监听v-model修饰符3.3、 事件修饰符 1、介绍 Vue 会根据不同的【指令】…

SQL Server2022安装教程

SQL Server 是一个关系数据库管理系统。它最初是由Microsoft、Sybase 和Ashton-Tate三家公司共同开发的&#xff0c;于1988 年推出了第一个OS/2版本。在Windows NT 推出后&#xff0c;Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了&#xff0c;Microsoft 将SQL Server移…

Java中快速排序的优化技巧:随机取样、三数取中和插入排序

目录 快速排序基础 优化1&#xff1a;随机取样 优化2&#xff1a;三数取中 优化3&#xff1a;插入排序 总结&#xff1a; 快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;它的平均时间复杂度为O(n log n)。然而&#xff0c;在某些情况下&…