Demo04.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package p1;
  2. /**
  3. * @author WanJl
  4. * @version 1.0
  5. * @title p1.Demo04
  6. * @description 封装
  7. * @create 2026/7/20
  8. */
  9. public class Demo04 {
  10. /*
  11. 面向对象的三大特性:
  12. 本质上就是减少写代码
  13. 为了让代码能够复用
  14. 封装
  15. 继承
  16. 多态
  17. 我们先讲第1个:封装
  18. 封装的含义和思想:
  19. 把该隐藏的隐藏起来,把该显示的显示出来。
  20. 隐藏的是功能的实现细节
  21. 显示的是功能的调用方式
  22. 比如:USB插口,就是一个非常典型的封装
  23. 或可以理解为 自己 组装电脑 和 买 一体机 笔记本电脑
  24. 比如有个 Person类
  25. public class p1.Person{ //程序 服务
  26. String name;
  27. int age;
  28. }
  29. public static void main(String[] args){//是我们站在用户的角度对程序进行测试的
  30. //创建Person对象
  31. p1.Person p=new p1.Person();
  32. p.name="张三";
  33. p.age=250;
  34. // p.age==-250000;虽然代码编译正确,但是不符合现实业务逻辑
  35. //所以就出现了封装
  36. 解决的方案有两步:
  37. 1、 把 age属性的权限提高,让【本类以外】的都无法访问(赋值、取值)
  38. 2、 定义一个为age属性赋值的方法,这个方法是所有人都能访问的,但是方法内要做判断
  39. age<1 || age>130 都不允许赋值,赋值都无效
  40. 3、定义一个获取age属性的方法,这个方法是所有人都能访问
  41. }
  42. Java的封装,提供了几个关键字,名叫【访问权限修饰符】
  43. public 公开的公共的, 使用public修饰的变量和方法,任何地方的任何类都能访问。
  44. private 私人的是有的,使用private修饰的变量和方法,除了自身之外的任何类都不能访问。
  45. 练习:
  46. 1、 补全Person类,为name 修饰private,并配置set和get方法
  47. 2、 创建 p1.Product 商品类,定义私有成员变量 品牌、名称、价格、数量 并对每个成员变量设置赋值和取值的方法
  48. 3、 创建Bird 类,定义私有成员变量 3个,并对每个成员变量设置赋值和取值的方法
  49. 封装的思想:
  50. 封装 是面向对象的三大特征之一(封装、继承、多态)
  51. 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部,外界是无法操作的。
  52. 封装的原则:
  53. 是把类的某些属性信息隐藏在类的内部,不允许外部程序直接访问,
  54. 而是通过该类提供的方法来实现对隐藏信息的操作和访问。
  55. 成员变量使用private修饰,让自身以外任何类都无法访问
  56. 成员方法使用public修饰,让任何类都能访问,不过在方法内部加以控制和增加业务逻辑
  57. 封装的好处:
  58. 通过方法来控制成员变量的操作,提高了代码的安全性
  59. 把代码用方法进行封装,提高了代码的复用性。
  60. 封装在Java中主要的体现就是为 类的成员 设置 【访问权限修饰符】
  61. public 公开的公共的, 使用public修饰的变量和方法,任何地方的任何类都能访问。
  62. private 私人的私有的,使用private修饰的变量和方法,除了自身之外的任何类都不能访问。
  63. default 默认的 不使用任何修饰符修饰的变量和方法,本类中、同包中可以访问。
  64. protected 本类中、同包中可以访问。非同包的子类可以访问,等到讲继承的时候再说
  65. */
  66. /*
  67. 创建一个学生类Student
  68. 包含私有成员变量:
  69. id 学号 (从1开始,每位递增1)
  70. name 姓名
  71. 公共的赋值和取值方法
  72. -------------------------------------------------------------------
  73. 创建一个StudentDemo类
  74. 有一个成员变量
  75. 整数类型的 studentCount; //表示学生的数量
  76. 里面有以下几个方法:
  77. 1、初始化方法 initStudents()
  78. 该方法会创建一个长度为studentCount的Student数组,
  79. 并创建5个学生对象,存入学生数组。
  80. 调用该方法时,会[返回]一个存有5位学生的 Student数组
  81. 2、随机学生方法 randomStudent()
  82. 该方法中调用Random对象,随机出一个 1~studentCount的随机整数(也就是学生id)
  83. 调用该方法,会返回随机出的一个学生id。
  84. */
  85. }