JavaSE-面向对象三大特性:封装、继承、多态详解

【JavaSE】之面向对象编程 Java基础面向对象编程相关知识介绍~ 阅读详情

一、封装

1. 为什么要有封装?

问题示例:

public class PrivateTest {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.legs = -3;  // 不合理的赋值
        animal.move();     // 输出:动物用 -3 条腿走路...
    }
}

class Animal {
    int legs;  // 属性直接暴露,可被任意修改
    
    public void move() {
        System.out.println("动物用" + legs + "条腿走路...");
    }
}

封装的目的:

  • 将对象的属性和实现细节隐藏,只对外提供公共的访问方式

  • 提高代码的安全性:防止属性被随意修改

  • 提高代码的维护性:内部实现修改不影响外部调用

  • 原则:该隐藏的隐藏,该暴露的暴露

2. 访问修饰符

修饰符

同类

同包

子类

不同包

说明

public

✓

✓

✓

✓

公共访问

protected

✓

✓

✓

受保护访问

默认

✓

✓

包内访问

private

✓

类内访问

3. 属性封装示例

class Animal {
    // 隐藏属性:private修饰
    private int legs;
    private String name;
    
    // 暴露公共的setter方法,控制属性的赋值
    public void setLegs(int legs) {
        if (legs == 2 || legs == 4) {  // 数据校验
            this.legs = legs;
        } else {
            System.out.println("腿的数量不合法!");
        }
    }
    
    // 暴露公共的getter方法
    public int getLegs() {
        return legs;
    }
}

4. 方法封装示例

class Car {
    private int speed;
    
    // 隐藏内部实现细节
    private void changeMeter() {
        // 更新码表显示
    }
    
    private void changeSpeed(int delta) {
        this.speed += delta;
    }
    
    // 暴露公共接口
    public void changeGear(int gear) {
        changeMeter();           // 内部调用
        changeSpeed(gear * 10);  // 内部调用
        System.out.println("当前速度:" + speed);
    }
}

二、继承

1. 为什么需要继承?

场景分析:

人(父类)
     ↙      ↓       ↘
  学生     老师      工人
  • 学生、老师、工人都有人的基本属性和行为

  • 每个子类又有自己特有的属性和方法

  • 继承可避免代码冗余,提高复用性

2. 继承语法

// 父类
class Person {
    String name;
    int age;
    String gender;
    
    public void eat() {
        System.out.println("吃饭");
    }
}

// 子类继承父类
class Student extends Person {
    String studentId;
    
    public void study() {
        System.out.println("学习");
    }
}

3. 方法重写(Override)

class Animal {
    public void move() {
        System.out.println("动物移动");
    }
}

class Dog extends Animal {
    // 重写父类方法
    @Override
    public void move() {
        System.out.println("狗用四条腿跑");
    }
}

4. 重写 vs 重载

区别点

重写(Override)

重载(Overload)

范围​

子类继承父类

同一个类内部

场景​

业务延伸,方法改进

同一个功能,参数不同

语法​

同名、同参数、同返回类型

同名、不同参数列表

访问权限​

不能更严格(可更宽松)

无限制

5. super关键字

class Father {
    int age = 40;
    
    public Father() {
        System.out.println("父类构造方法");
    }
    
    public void show() {
        System.out.println("父类方法");
    }
}

class Son extends Father {
    int age = 20;
    
    public Son() {
        super();  // 调用父类构造方法(可省略)
    }
    
    public void display() {
        System.out.println("子类年龄:" + age);
        System.out.println("父类年龄:" + super.age);  // 访问父类属性
        super.show();  // 调用父类方法
    }
}

6. final关键字

final的作用:

  • 修饰类:不能被继承(如String类)

  • 修饰方法:不能被重写

  • 修饰变量:变为常量,不可修改

// final修饰类
final class FinalClass {
    // 不能被继承
}

// final修饰方法
class Base {
    public final void finalMethod() {
        // 不能被子类重写
    }
}

// final修饰变量
class Circle {
    public final double PI = 3.14159;  // 常量
    // PI = 3.15;  // 错误!不能修改
}

三、多态

1. 为什么要有多态?

问题代码:

class ZooKeeper {
    // 需要为每种动物写一个feed方法
    public void feed(Dog dog) {
        dog.eat();
    }
    
    public void feed(Cat cat) {
        cat.eat();
    }
    
    public void feed(Lion lion) {
        lion.eat();
    }
    // ... 需要无数个重载方法
}

多态解决方案:

class ZooKeeper {
    // 一个方法搞定所有动物
    public void feed(Animal animal) {
        animal.eat();  // 运行时根据实际对象类型调用对应方法
    }
}

2. 什么是多态?

多态定义:​ 父类引用指向子类对象

语法:

父类类型 对象名 = new 子类类型();

示例:

// 父类引用指向子类对象
Animal animal1 = new Dog();  // 多态
Animal animal2 = new Cat();  // 多态

// 只能调用父类中声明的方法
// 实际执行的是子类重写的方法
animal1.eat();  // 执行Dog的eat方法
animal2.eat();  // 执行Cat的eat方法

3. instanceof运算符

public void showAnimal(Animal animal) {
    animal.eat();
    
    // 类型判断
    if (animal instanceof Dog) {
        Dog dog = (Dog) animal;  // 向下转型
        dog.watchHouse();  // 调用Dog特有方法
    } else if (animal instanceof Cat) {
        Cat cat = (Cat) animal;  // 向下转型
        cat.catchMouse();  // 调用Cat特有方法
    }
}

总结

特性

核心思想

主要作用

实现方式

封装​

隐藏细节,暴露接口

提高安全性、可维护性

private、getter/setter

继承​

代码复用,扩展功能

避免重复代码,实现层次结构

extends、super

多态​

统一接口,不同实现

提高扩展性,降低耦合

父类引用、方法重写

掌握面向对象这三大特性,是Java编程的基础,也是写出高质量代码的关键。在实际开发中,要灵活运用这些特性,设计出高内聚、低耦合的程序结构。

envi反演水质参数_遥感水质反演之反演模型 水质反演的框架图此为反演模型的章节第一部分,统计学基础:概率论、矩阵和数理统计的知识统计学知识框架# 1 基本统计概念知识在于应用,而非记忆!我们都是在样本的层面去操作数据的,以达到对总体性质的估计和推断,拿到一组数据首先进行基本的统计描述,常用的有:样本均值: 样本方差(调整方差)不是除以n,而是n-1, 标准差为样本方差开方即可皮尔逊积矩相关系数(简称相关系数): 相关系数范围在[-1,... 阅读详情

相关推荐

PG-FP6编程器错误代码解析与高效排障实战指南

在嵌入式系统开发与量产烧录中,编程器是连接开发环境与目标硬件的重要桥梁。其工作原理是通过特定的通信协议(如UART、SWD)与微控制器(MCU)建立连接,完成程序代码的写入、擦除与校验。这项技术的核心价值在于确保固件能够准确、可靠地部署到硬件中,是产品从原型到量产的关键环节。在实际的工程实践中,尤其是在使用瑞萨(Renesas)PG-FP6这类编程器进行调试或批量生产时,工程师常会遇到各种通信失败、编程验证错误或电源异常等问题,这些问题往往以特定的错误代码形式呈现。深入理解这些错误代码背后的硬件连接、电源时

weixin_34387468的博客 579

JAVA编程思想

javase 桌面 javame 移动端 javaee,服务器端, JAVA,高可用、高性能、高并发 java单继承、跨平台、 高内聚低耦合?for for each ? this super? 父类引用指向不同的子类对象 数组可以保存数据类型,容器不可以 泛型、 JAVA编程思想,(谈女朋友模式) 1、1-6章:如何创建对象 类--字段--方法--权限修饰符--数据类型--操作符--控制流程 2、7-8:深入对象 封装--继承(组合)--多态 3、9-10:对象家长 类--接...

qq_34968810的博客 260

卸载重装Ubuntu22.04双系统

先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗

编程小白的博客 8105

【Java SE语法篇】8.面向对象三大特征——封装、继承和多态

掌握封装、继承和多态的特征

QQ3447387928的博客 2192

别再找在线API了!用C#调用微信电脑版自带的OCR,本地识别又快又准

本文详细介绍了如何利用C#调用微信电脑版内置的OCR引擎实现本地文字识别,解决传统云端API的隐私和网络依赖问题。微信OCR具备高精度中文识别、完全离线运行和零成本接入三大优势,特别适合企业文档电子化处理。通过实战代码演示了核心交互逻辑、批量处理流水线和表格数据提取等高级应用场景。

weixin_29295541的博客 588

EPICS电机支持(asynMotor)

EPICS电机支持(asynMotor)

yuyuyuliang00的博客 915

【java面向对象编程】第六弹----封装、继承、多态

一篇j搞懂ava面向对象编程三大特征:封装、继承、多态。超全超详细

2302_80713883的博客 2176

Twincat Scopeview录波中的Ringbuffer设置技巧与常见问题解决

本文深入解析了倍福Twincat Scopeview录波功能中Ringbuffer(环形缓冲区)的核心设置技巧与常见问题解决方案。针对数据丢失、触发时机不准等痛点,详细阐述了缓冲区大小、预触发样本、采样率等关键参数的优化配置,并提供了多通道同步、自动诊断等实战应用指南,帮助工程师高效捕捉和分析PLC数据。

rainy的博客 845

【JavaSe语法】详解封装、继承、多态

封装、继承、多态等是面向对象程序三大特性,也是JavaSe基础语法中较难的部分。在本文之我会结合所学的知识与自己的理解向大家阐明这三种特性的概念及运用。目录前言封装1,封装的概念2,封装的实现继承1,继承的概念2,继承的语法3,父类成员的访问4,super关键字5,子类构造方法6,继承时代码执行顺序7,继承方式多态1,向上转型2,重写3,动态绑定4,多态5,向下转型6,多态的优缺点7,避免在构造方法中调用重写方法。

careathers的博客 447

骑砍2霸主MOD开发(9)-游戏大地图(MapScene)

Settlement类型由town,castle,castle_village,village,hideout五种类型组成,通过对GameEntity中添加tag实现类型的加载.大地图中军团(MobileParty)的移动速度,AI寻路,食物消耗等均和当前MobileParty所处地形有关,地形统一被定义为TerrainType,类型有森林,荒漠等.MapScene.Read("Main_map", ref sceneInitializationData, "") 装载Main_map大地图。

骑砍战团&霸主MOD开发 1621

看完这篇你就能讲解LLC软开关:一文秒懂 ZVS 和 ZCS 到底啥意思!

想要 MOS 管ZVS 好实现➜ 把工作频率保持在 fr1 或更高。想让整流二极管也ZCS 实现➜ 频率就别高过 fr1。设计磁性元件时,一定要计算好 Lr、Lm、Cr 的值,这直接决定你 fr、fr1 是多少!LLC 的软开关技术不是“魔法”,是电感电容+频率控制的精妙组合;fr1 就像黄金分割点,整流和开关都能“刚刚好”;不是所有软开关都能同时实现,要看你在频率曲线的哪一段!

weixin_43199439的博客 1530

JavaSE面试题——5.面向对象的三大特征:封装、继承、多态

封装: 封装的目的是隐藏对象内部的实现细节,以提高安全性和简化编程。 指把一个对象的属性隐藏在对象内部,不允许对象外部直接访问对象内部的数据,只能通过可以被外界访问的方法来操作这些属性 继承: 继承是代码复用的一种机制,以已存在的类为基础建立新类的技术,新类被称为子类,已存在的类被称为父类,子类自动继承父类的非私有的属性和方法,从而达到代码复用的效果 JAVA中只支持单继承,不支持多继承 多态: 顾名思义,多态表示一个对象具有多种形态,具体表现为父类的引用指向子类对象,使程序的拓展性更强,提高了系统的灵活性

出发,永远是最有意义的事,去做就是了 4851

汇川H5U模拟量输出模拟量转换FC: S_RTI

汇川H5U模拟量输入模拟量转换 FC S_ITR_RXXW_Dor的博客-优快云博客接口中的临时变量,如果优化的可以省去一些,感兴趣的可以自行编写修改下,这里不在举例。至此模拟量输入转换FC编写完成。

RXXW_Dor的博客 6677

【JAVASE】面向对象程序三大特性之一( 封装)

在文件的最上方加上一个package语句指定该代码在哪个包中包名需要尽量指定成唯一的名字通常会用公司的域名的颠倒形式例如).包名要和代码路径相匹配例如创建的包那么会存在一个对应的路径来存储代码.如果一个类没有package语句则该类被放到一个默认包中。

chendemingxxx的博客 3353

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)

JavaSE核心知识点02面向对象编程02-02(封装、继承、多态)

感谢阅读 1286

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Javase之——面向对象编程的三大特性(封装、继承、多态)

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。多态是同一个行为具有多个不同表现形式或形态的能力。是面向对象的第三大特征,建立在封装和继承的基础之上。

weixin_73850357的博客 736

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JavaSE面向对象的三大特性之封装

面向对象三大特性一、封装二、继承三、多态 一、封装 二、继承 三、多态

Luoposhan_master的博客 447

Java系列9—封装、继承和多态

面向对象的三大特征为:封装、继承、多态。

qq_42486675的博客 9206

JavaSE/封装、继承、多态

javaSE的封装、继承、多态的代码展示、图文解说。

m0_68700019的博客 784

JavaSE——封装、继承和多态

本文主要讲述了类和对象的三大特性:封装、继承和多态,还有访问限定符

wx2023_10_15的博客 1125

JavaSE基础五:最通俗易懂的 Java 面向对象理解、面向对象三大特性概述(封装、继承、多态)

一、面向对象思想概述 在这之前,我们先来讲述面向过程。 面向过程:明确一个目的后,一步步亲自参与其中去实现它,这就是面向过程 举例:洗衣服:换下脏衣服----盛水----浸泡----手搓----漂清----晾干 面向对象:明确一个目的后,将完成目的的过程进行封装,指挥封装好的东西去完成目的,这就是面向对象 举例:全自动洗衣机----------- 一键洗衣 1.面向对象的特征: 封装(encaps...

她长眠于月色 468

JavaSE学习----(五)面向对象三大特征:封装、继承、多态 深度解析

深度解读了面向对象的三大特征:封装、继承、多态。也讲解了方法重写的内容。

qq_61899969的博客 772

【JavaSE】封装、继承与多态

1.1简介1.2特点:对象的内部状态(即属性或数据成员)被隐藏起来,外部世界只能通过对象提供的方法来访问或修改这些状态。:通过访问修饰符(如publicprivateprotected和默认(包级私有))来控制对属性和方法的访问级别。:封装可以确保数据的完整性,因为只能通过对象提供的方法来修改数据,而这些方法通常包含了对数据的验证和逻辑检查。:封装使得对象只暴露必要的接口给外部世界,从而简化了对象的使用,并降低了对象之间的耦合度。1.3好处:通过控制对属性的访问级别,可以确保数据不会被恶意修改或误用。

wosixiaokeai的博客 999

【javaSE】面向对象程序三大特性之封装

1、在文件的最上方加上一个 package 语句指定该代码在哪个包中.2、包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 ).3、包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码.4、如果一个类没有 package 语句, 则该类被放到一个默认包中.

m0_71731682的博客 1891

三大特征:封装,继承,多态

Java基础 面向对象三大特征 一:封装 1.概念: 将数据和基于数据的操作封装在一起。 2.好处: 重点:将数据保存在内部; 目的:将类使用者和类设计者分开。 3.应用在代码中。 在定义变量和成员方法是要秉持授予最小访问权限的原则。 若成员变量被“pirvate”定义,要考虑提供对应得public get,public set方法。 好处:可以修改private成员变量;完成对成员变量访问的读写分离;可以在修改值时进行检查,拒绝错误修改 4.访问权限修饰符 在Java中,一切事物都有访问权限,在语言层

Rul丶的博客 254

java面向对象三大特征——封装、继承、多态

java面向对象三大特征——封装、继承、多态。封装是最简单、最基本的,它并不是面向对象独有的,在计算机中从硬件到软件封装无处不在。

weixin_45258054的博客 267
上一篇: JavaSE--方法与变量
下一篇: JavaSE-抽象类和接口详解
StackNoOverflow
博客等级 码龄1年 22粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值