Java快速入门系列-4(面向对象编程)

第四章:面向对象编程

    • 4.1 类与对象
      • 4.1.1 类的概念
      • 4.1.2 对象的实例化与使用
      • 4.1.3 访问修饰符与封装
    • 4.2 继承、封装与多态
      • 4.2.1 继承
      • 4.2.2 封装
      • 4.2.3 多态
    • 4.3 抽象类与接口
      • 4.3.1 抽象类
      • 4.3.2 接口
    • 4.4 包与访问控制

开篇图

4.1 类与对象

4.1.1 类的概念

在Java中,类(Class) 是面向对象编程的核心概念之一,它是对现实世界中实体的抽象,用来描述一类对象的共同特征和行为。每个类都有其属性(也称为成员变量或字段)和方法(也称为成员函数)。例如,我们可以创建一个Person类来描述人的基本属性和行为:

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 this.name;}// 方法:设置年龄public void setAge(int age) {this.age = age;}// 方法:显示信息public void displayInfo() {System.out.println("姓名:" + this.name + ",年龄:" + this.age);}
}

4.1.2 对象的实例化与使用

类是模板,而对象(Object) 是类的实例。通过类可以创建多个具有相同属性和方法的对象。例如,基于上面的Person类创建两个不同的个体:

public class Main {public static void main(String[] args) {// 实例化对象Person person1 = new Person("Alice", 25);Person person2 = new Person("Bob", 30);// 调用对象的方法person1.displayInfo(); // 输出:姓名:Alice,年龄:25person2.setAge(35);     // 修改Bob的年龄person2.displayInfo(); // 输出:姓名:Bob,年龄:35}
}

4.1.3 访问修饰符与封装

在上述例子中,我们注意到nameage属性被声明为private,这是Java中的访问修饰符,用于限制类外部对这些成员的访问权限。通过提供公共的getter和setter方法实现了数据的封装,这是面向对象编程的一个重要原则。

4.2 继承、封装与多态

4.2.1 继承

继承(Inheritance) 是子类从父类那里继承已有的属性和方法的机制,增强了代码的复用性和可扩展性。以下是一个简单的继承示例:

public class Student extends Person {private String studentId;public Student(String name, int age, String studentId) {super(name, age); // 调用父类构造方法初始化基本信息this.studentId = studentId;}// 学生特有方法public void study() {System.out.println(this.getName() + "正在学习...");}
}public class Main {public static void main(String[] args) {Student student = new Student("Charlie", 20, "S001");student.study(); // 输出:Charlie正在学习...}
}

4.2.2 封装

封装(Encapsulation)是指将对象的状态信息(即属性)隐藏在对象内部,通过公共方法对外提供操作和访问的能力。如前文所述,通过getter和setter方法实现封装。

4.2.3 多态

多态(Polymorphism) 是指允许不同类的对象对同一消息作出不同的响应,包括方法重载(Overloading)和方法覆盖(Overriding)。方法重载是在同一个类中定义多个同名方法,但参数列表不同;方法覆盖则是子类重新定义了父类的方法。

public class Animal {public void makeSound() {System.out.println("动物发出声音...");}
}public class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("汪汪汪...");}
}public class Main {public static void main(String[] args) {Animal animal = new Animal();animal.makeSound(); // 输出:动物发出声音...Animal dog = new Dog(); // 多态实例化dog.makeSound(); // 输出:汪汪汪...}
}

4.3 抽象类与接口

4.3.1 抽象类

抽象类(Abstract Class) 是不能直接实例化的类,它主要用于被其他类继承。抽象类可以包含抽象方法(没有具体实现的方法),子类必须实现这些抽象方法才能实例化。

abstract class Shape {abstract void draw();void color(String color) {System.out.println("形状被填充为" + color);}
}class Circle extends Shape {@Overridevoid draw() {System.out.println("绘制圆形");}
}public class Main {public static void main(String[] args) {Shape circle = new Circle();circle.draw();   // 输出:绘制圆形circle.color("红色"); // 输出:形状被填充为红色}
}

4.3.2 接口

接口(Interface) 定义了一组方法,这些方法在接口中没有具体的实现,它们只提供了一个规范。类可以实现接口,从而承诺会提供接口中所有方法的具体实现。

interface AnimalActions {default void sleep() {System.out.println("动物正在睡觉...");}void eat();
}class Cat implements AnimalActions {@Overridepublic void eat() {System.out.println("猫正在吃鱼...");}
}public class Main {public static void main(String[] args) {Cat cat = new Cat();cat.sleep(); // 输出:动物正在睡觉...cat.eat();  // 输出:猫正在吃鱼...}
}

自Java 8开始,接口还可以包含默认方法(default method)和静态方法(static method),增强了接口的功能性和灵活性。

4.4 包与访问控制

Java中的包(package)是一种组织类的方式,有助于避免命名冲突并提供访问控制。访问控制主要通过publicprotecteddefault(无修饰符)、private四种访问修饰符进行管理。

package com.example.animals;public class Dog {protected String breed;// ...
}// 在另一个包下的类中引用Dog类
package com.example.users;import com.example.animals.Dog;public class PetOwner {Dog petDog = new Dog();// petDog.breed 可以访问,因为protected成员在不同包的子类中可见
}

结前图
至此,我们已经深入探讨了面向对象编程的基本概念和核心特性。理解和掌握这些知识点对于后续Java学习至关重要,它们构成了构建复杂软件系统的基石。在接下来的学习中,我们将进一步探索更高级的主题和实际应用场景。

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

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

相关文章

【java探索之旅】逻辑控制掌握 顺序结构 分支语句

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、逻辑控制的概念二、顺序结构三、分支结构3.1 if语句3.2 if习题巩固3.3 细节注意项…

excel散点图怎么每个点添加名称

最终效果图: 添加图标元素->数据标签->其他数据标签选项 选择单元格中的值 手动拖动数据标签,调整到合适的位置。

基于Vue3 中后台管理系统框架

基于Vue3 中后台管理系统框架 文章目录 基于Vue3 中后台管理系统框架一、特点二、源码下载地址 一款开箱即用的 Vue 中后台管理系统框架,支持多款 UI 组件库,兼容PC、移动端。vue-admin, vue-element-admin, vue后台, 后台系统, 后台框架, 管理后台, 管理…

Vue3组件基础示例

组件是vue中最推崇的,也是最强大的功能之一,就是为了提高重用性,减少重复性的开发。 如何使用原生HTML方法实现组件化 在使用原生HTML开发时,我们也会遇到一些常见的功能、模块,那么如何在原生HTML中使用组件化呢&am…

线上研讨会 | 新一代数字化技术赋能机器人及智能产线行业高质量发展

随着智能制造的快速推进,制造业转型升级到了关键阶段。越来越多的企业以数字化技术搭配智能机器人及智慧产线,主动实现数字化转型。达索系统3D体验平台是实现企业数字化转型的新一代数智化平台,基于型、数字驱动、数字化连续技术,…

HarmonyOS实战开发-存储空间统计(仅对系统应用开放)

介绍 本示例通过应用程序包管理、应用空间统计与卷管理模块,实现了查看当前设备存储空间信息、所有安装的应用的存储信息、所有可用卷的存储信息的功能。 效果预览 使用说明: 1.主页面会展示当前设备存储使用的详细信息。 2.点击“应用”,…

HarmonyOS 应用开发-页面间共享组件实例的案例

介绍 本示例提供组件实例在页面间共享的解决方案:通过Stack容器,下层放地图组件,上层放Navigation组件来管理页面,页面可以共享下层的地图组件,页面中需要显示地图的区域设置为透明,并参考触摸交互控制&am…

ST表的解释

介绍 ST表:一种用于高效处理区间查询的数据结构。它可以在O(1)的时间复杂度内回答某一区间的最值查询(最小值、最大值等)。ST表使用动态规划的思想,通过预处理的方式来快速计算出各个区间的最值。 st算法的主要思想就是将所求的…

CTK插件框架学习-服务工厂(06)

CTK插件框架学习-信号槽(05)https://mp.csdn.net/mp_blog/creation/editor/137240105 一、服务工厂定义 注册插件时使用服务工厂注册,使用getService根据调用者插件资源文件内容获取在服务工厂内的对应实现在服务工厂中可以知道是哪个插件正在调用服务工厂懒汉模式…

Jenkins安装了locale汉化插件后出现部分翻译,部分没翻译的情况

1. Default Language中设定“zh_CN”简体中文,"zh_TW"繁体中文。2. 插件“Locale plugin”和“Localization: Chinese (Simplified)”不安装不好使。3. “Ignore browser preference and force this language to all users”必须选上。4. 简体中文设定后&…

stack和queue的使用

前言 前面我们对string、vector、list做了介绍并对底层进行了实现!本期我们继续来介绍STL容器,stack和queue! 本期内容介绍 stack 常用接口的介绍 queue 常用接口的介绍 什么是stack? 这里的栈和我们C语言实现的数据结构的那个栈功能是一样…

拥有自己的云环境-域名及备案

序 唠叨两句 之前的文章,讲了如何购买一台云服务器,然后购买之后,如何操作云服务器。当买完云服务器之后,我们就可以使用云服务器提供的公网ip,访问到我们的服务器上。但是,这样怎么能体现我们一个老程序…