恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

计算机学习笔记 从封装、继承到多态与抽象类全景解析(附带详细代码示例)

  • 首页
  • 资讯中心
  • /
  • 计算机学习笔记 从封装、继承到多态与抽象类全景解析(附带详细代码示例)

相关资讯

Node.js保姆级安装配置指南:从零搭建高效开发环境 2026/8/6 7:30:26
如何5分钟配置Unity游戏翻译神器:XUnity.AutoTranslator终极指南 2026/8/6 7:30:26
NGA论坛优化摸鱼体验:彻底改变你的论坛浏览方式 2026/8/6 7:30:26

最新资讯

Android无线调试与ADB键盘:远程控制与自动化测试实战指南
Prompt工程核心:系统、用户、助手提示词的分层协作与工程实践
InSAR—ASF批量下载工具
中小公司项目管理软件选型指南|避开功能冗余与落地陷阱,实用工具甄选攻略
Unity自定义图集系统实现:从算法到渲染的完整工程实践
电脑电源保护措施全解析:OCP、OVP、SCP等机制原理与选购指南

今日推荐

电力系统调度中的源荷不确定性建模与优化实践
VGG-T3技术解析:3D重建速度的革命性突破
深度解析旅游网站建设的意义及其对行业发展的深远影响与核心价值体现

本周热门

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案
分布式配置中心选型实战:Nacos与Consul在创业场景下的对比
MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

计算机学习笔记 从封装、继承到多态与抽象类全景解析(附带详细代码示例)

发布时间:2026/8/6 7:35:26
计算机学习笔记 从封装、继承到多态与抽象类全景解析(附带详细代码示例) 8.5 课程笔记整理从封装、继承到多态与抽象类全景解析1. 封装与权限控制1.1 封装思想定义隐藏对象的属性和实现细节仅对外提供公共访问方式。核心关注“如何调用”不关心“内部实现”。就像使用遥控器只需知道按键功能无需了解内部电路。1.2 实现方式私有化属性使用private修饰成员变量禁止外部直接访问。提供公共方法使用public的get/set方法作为唯一访问通道。public class Person { // 1. 私有化属性 private String name; private int age; // 2. 提供公共的 Getter/Setter public String getName() { return name; } public void setName(String name) { this.name name; } // Setter 中可以加入逻辑校验保证数据安全 public void setAge(int age) { if (age 0 age 120) { this.age age; } else { System.out.println(年龄不合法); } } }1.3 引用类型的封装安全深拷贝问题对于引用类型如Date、数组如果get方法直接返回引用外部仍可修改对象内部数据导致封装失效。解决在get方法中返回对象的副本深拷贝。import java.util.Date; public class User { private Date birthDate; // 错误的 Getter (浅拷贝) - 外部可修改 birthDate // public Date getBirthDate() { return birthDate; } // 正确的 Getter (深拷贝) - 返回副本 public Date getBirthDate() { return new Date(birthDate.getTime()); } }1.4 访问权限private仅限当前类内部访问。默认无修饰符当前类 同包。protected当前类 同包 子类。public所有地方。2. final 关键字2.1 修饰变量常量基本类型数值一旦赋值不可改变。引用类型引用地址指向的对象不可改变但对象内部的内容可以修改。public class FinalDemo { public static void main(String[] args) { // 1. 修饰基本类型 final int NUM 10; // NUM 20; // 报错无法再次赋值 // 2. 修饰引用类型 final int[] arr {1, 2, 3}; // arr new int[5]; // 报错引用地址不可变 arr[0] 99; // 正确对象内部内容可变 System.out.println(arr[0]); // 输出 99 } }2.2 修饰类与方法修饰类该类不能被继承断子绝孙类。修饰方法该方法不能被重写最终方法。// final class Father { } // 报错无法继承 final 类 class Father { public final void run() { System.out.println(父亲在跑); } } class Son extends Father { // Override // public void run() { } // 报错无法重写 final 方法 }3. 静态域与静态方法 (static)3.1 静态成员归属属于类本身所有对象共享同一份。调用通过类名.成员访问不依赖对象实例。内存类加载时分配内存静态常量池优先于对象存在。3.2 访问规则静态方法只能访问静态成员静态变量、静态方法。非静态方法可以访问静态成员和非静态成员。原因静态方法在对象创建前就存在无法访问依赖对象的非静态成员。public class StaticDemo { static int staticVar 1; int instanceVar 2; // 静态方法 public static void staticMethod() { System.out.println(staticVar); // 正确 // System.out.println(instanceVar); // 报错无法访问非静态变量 } // 非静态方法 public void instanceMethod() { System.out.println(staticVar); // 正确 System.out.println(instanceVar); // 正确 } }4. 参数传递机制4.1 值传递核心原则Java 中只有值传递。基本类型传递的是数值的副本。方法内修改不影响外部。引用类型传递的是地址值的副本。方法内修改对象属性会影响外部但修改引用指向如obj null不影响外部。public class PassByValueDemo { // 基本类型传递 public static void changeValue(int x) { x 100; // 修改副本不影响 main 中的 a } // 引用类型传递 public static void changeObj(Person p) { p.setName(李四); // 修改副本指向的对象内容影响 main 中的 person p new Person(); // 修改副本的指向不影响 main 中的 person p.setName(王五); } public static void main(String[] args) { int a 10; changeValue(a); System.out.println(a); // 输出 10 Person person new Person(张三); changeObj(person); System.out.println(person.getName()); // 输出 李四不是 王五 } }5. 方法重载 (Overload)5.1 定义在同一个类中允许存在多个同名方法但参数列表必须不同类型、数量、顺序。5.2 规则方法签名方法名 参数列表。无关项与返回值类型、访问修饰符无关。public class OverloadDemo { // 参数类型不同 public void add(int a, int b) { System.out.println(整数相加); } public void add(double a, double b) { System.out.println(小数相加); } // 参数数量不同 public void add(int a) { System.out.println(单个整数); } // 参数顺序不同 public void print(String s, int i) { } public void print(int i, String s) { } // public int add(int a, int b) { } // 报错与第一个方法签名冲突 }6. 构造器与初始化6.1 构造器特点方法名与类名相同。没有返回值类型连void都没有。创建对象时自动调用。6.2 默认初始化如果成员变量未显式赋值系统会赋予默认值int为0boolean为false引用为null。6.3 this() 调用在构造器中调用本类的其他构造器必须放在第一行。public class Person { private String name; private int age; // 无参构造 public Person() { this(匿名, 18); // 调用有参构造必须写在第一行 } // 有参构造 public Person(String name, int age) { this.name name; this.age age; } }7. 初始化块 (Initializer Block)7.1 定义使用{}包裹的代码块用于初始化属性。7.2 执行顺序面试重点静态代码块(static {})类加载时执行只执行一次。普通代码块({})每次创建对象时执行优先于构造器。构造器最后执行。public class InitDemo { static { System.out.println(1. 静态代码块); } { System.out.println(2. 普通代码块); } public InitDemo() { System.out.println(3. 构造器); } public static void main(String[] args) { new InitDemo(); new InitDemo(); } } // 输出 // 1. 静态代码块 // 2. 普通代码块 // 3. 构造器 // 2. 普通代码块 // 3. 构造器8. 继承与多态8.1 继承 (extends)单继承一个类只能有一个直接父类。多层继承A继承BB继承C。根类所有类默认继承Object。限制private成员不可继承final类不可继承。8.2 方法重写 (Override)定义子类定义与父类方法签名完全相同的方法。规则子类方法覆盖父类方法。调用时执行子类版本。对比重载重载看参数列表重写看继承关系且签名必须一致。class Animal { public void run() { System.out.println(动物跑); } } class Dog extends Animal { Override public void run() { System.out.println(狗跑); } // 重写 }8.3 多态 (Polymorphism)前提继承 重写。表现父类引用指向子类对象。规则编译看左边父类运行看右边子类。限制父类引用只能调用父类中定义的方法不能调用子类新增的方法。public class PolyDemo { public static void main(String[] args) { Animal a new Dog(); // 多态 a.run(); // 输出 狗跑执行子类重写的方法 // a.bark(); // 报错Animal 类中没有 bark 方法 } }8.4 强制类型转换向上转型自动小碗装大碗。向下转型强制大碗倒小碗需使用instanceof检查防止ClassCastException。Animal a new Dog(); Dog d (Dog) a; // 强制转换 d.bark(); // 调用子类特有方法8.5 总结子类继承父类之后可以用父类的所以方法重写过的就按照自己的方法运行和自己的方法。父类不能用子类的方法。父类强制转化为子类时可以用自己的方法和子类重写的方法。父类可以使用子类定义的所有数据类型。9. 继承中的初始化顺序面试重点当涉及继承时初始化顺序如下父类静态代码块子类静态代码块父类普通代码块父类构造器子类普通代码块子类构造器口诀静父 - 静子 - 普父 - 构父 - 普子 - 构子class Father { static { System.out.println(1. 父类静态); } { System.out.println(3. 父类普通); } public Father() { System.out.println(4. 父类构造); } } class Son extends Father { static { System.out.println(2. 子类静态); } { System.out.println(5. 子类普通); } public Son() { System.out.println(6. 子类构造); } } public class Test { public static void main(String[] args) { new Son(); } }10. 包 (Package) 与类库管理10.1 包的核心概念本质包Package本质上就是文件系统中的文件夹层级结构。作用避免命名冲突就像不同文件夹下可以有同名文件一样不同包下可以有同名类如com.jd.User和com.taobao.User。分类管理将功能相关的类组织在一起便于维护。10.2 命名规范规则通常采用公司域名的倒写形式以确保全球唯一性。示例京东com.jd百度某部门com.baidu.department110.3 导入机制 (Import)精确导入import java.time.LocalDate;优点清晰只加载需要的类。通配符导入import java.util.*;缺点内存消耗会将整个包下的类都加载到内存中。打包体积可能导致最终应用体积变大就像把整个书架搬回家而不仅仅是借一本书。静态导入import static java.lang.System.out;作用调用静态成员时可省略类名。示例out.println(Hello);代替System.out.println(Hello);。10.4 类库设计权衡 (Java vs C)C语言小而多。类库功能单一内存占用小但数量庞大开发者记忆负担重。Java大而全。功能打包在一起调用方便但可能包含未使用的功能占用更多内存。优化项目打包部署前应检测并剔除未使用的类以减小体积。11. 访问权限修饰符 (Access Modifiers)Java通过四种权限控制类成员的可见性。修饰符当前类同包子类其他包通俗理解public✅✅✅✅公开大门敞开谁都能进。protected✅✅✅❌受保护同包邻居能进不同包的亲戚子类也能进。(默认)✅✅❌❌包级私有仅限同包邻居跨包即使是亲戚也不行。private✅❌❌❌私有仅限自己谁都不让进。class Person { public String name; // 谁都能访问 protected int age; // 同包或子类能访问 int height; // (默认) 只有同包能访问 private String secret; // 只有自己知道 public void test() { name 张三; age 18; height 170; secret 密码; // 本类内部都可以访问 } }12. 抽象类 (Abstract Class)12.1 核心概念定义使用abstract修饰的类。它代表一个抽象概念不能实例化不能new。类比Animal动物是一个抽象概念现实中不存在叫“动物”的具体生物只有Cat、Dog等具体动物。作用作为子类的模板定义规范。12.2 抽象方法定义没有方法体{}的方法必须用abstract修饰。强制约束包含抽象方法的类必须是抽象类。继承抽象类的具体子类必须重写所有抽象方法。如果子类不重写子类也必须声明为抽象类。目的强制子类实现特定行为避免业务逻辑遗漏如忘记实现run方法。12.3 抽象类的特性构造方法抽象类可以有构造方法。作用供子类创建对象时通过super()调用用于初始化父类属性打地基。方法组成可以同时包含抽象方法强制子类实现和具体方法子类直接继承复用。12.4 关键限制abstract和final不能共存abstract要求被继承/重写final禁止继承/重写语义矛盾。abstract和static不能共存static方法随类加载而存在abstract方法无方法体无法调用没有意义。abstract class Animal { // 抽象方法强制子类实现 public abstract void run(); // 具体方法子类可直接复用 public void eat() { System.out.println(动物在吃东西); } } class Cat extends Animal { // 必须重写 run 方法否则编译报错 Override public void run() { System.out.println(猫在跑); } }13. 接口 (Interface) - 简介定义比抽象类更纯粹的抽象形式。特点接口中的方法默认都是抽象方法无需写abstract。实现接口的类实现类必须重写接口中所有方法。与抽象类的区别抽象类灵活可包含具体方法和抽象方法。接口纯粹早期版本中所有方法必须是抽象的侧重于定义规范。// 1. 定义一个 USB 接口规定好必须有什么功能 interface UsbInterface { // 抽象方法只声明不写具体实现 void start(); void stop(); } // 2. 手机类实现 USB 接口 class Phone implements UsbInterface { Override public void start() { System.out.println(手机开始连接电脑准备传输照片...); } Override public void stop() { System.out.println(手机安全断开连接。); } }肝死我了

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号