浅谈“封装”

亦凉 2022-11-19 09:58 244阅读 0赞

文章目录

  • 前言
  • 一、封装概述
    • 1.为什么要封装
    • 2.封装原则
  • 二、代码示例
    • 1.创建一个名为学生的类
    • 2.向学生类里面加一些学生们公有的东西
    • 3.写关于学生类的无参构造函数以及有参构造函数(重要!!!!!!!!!!)
    • 4.使用get、set 方法
    • 5.封装代码
  • 三,打击到我的代码
    • 1.家庭地址类
    • 2.成绩单类
    • 3.学生类
    • 2.测试
  • 总结

前言

唉,今天进行了一个小测试,一下子感觉学的就是个屁,前段时间还以为自己学得可以,就进行了个小测试,测试有10题,时间只有1个小时,值做出了5道,不能怪时间太少,只能怪自己打字慢、思路太迟钝了、知识掌握得不彻底,学了后面忘了前面,所以今天就复习巩固一下前面学得封装吧,稍微会有一点扩展,主要是被那个封装的题打击到了。

一、封装概述

1.为什么要封装

1、安全
2、隔离变化
3、操作简单
4、可从用

2.封装原则

该隐藏的隐藏起来,该暴露的暴露出来

二、代码示例

一言不合咱们就代码见了,哈哈,主要是不太喜欢那些太官方的话,所以干脆直接上干货了,

1.创建一个名为学生的类

  1. public class Student {
  2. }

注意:类名的首字母一定大写,还有最好用英文来表示,这是为了代码具有更强的可读性——见名知意。

2.向学生类里面加一些学生们公有的东西

代码如下(示例):

  1. public class Student {
  2. private String name;
  3. private int number;
  4. }

为了让大家看得更直观,我只加了两个属性学生名字(name),学号(number),这里我们就用面向企业级的关键修饰符private,为了避免属性暴露,当然也是为了后续的封装做准备。

3.写关于学生类的无参构造函数以及有参构造函数(重要!!!!!!!!!!)

  1. public class Student {
  2. private String name;
  3. private int number;
  4. // 无参构造函数
  5. public Student() {
  6. }
  7. // 有参构造函数
  8. public Student(String name, int number) {
  9. super();
  10. this.name = name;
  11. this.number = number;
  12. }
  13. }

这里想我一样的初学者建议手敲,方便加深印象。其实无参构造函数是系统默认存在的,可以不用弄出来但是不管在什么时候一定要记住,手动的加无参构造函数,因为如果一个类里面没有其他构造函数的话,那还好,但是当你有了有参构造函数,你又没手动添加,就会将你的无参构造函数给覆盖了,你就调用不了,泪目…,亲生体验。

4.使用get、set 方法

  1. package com.etime09;
  2. public class Student {
  3. private String name;
  4. private int number;
  5. // 无参构造函数
  6. public Student() {
  7. }
  8. // 有参构造函数
  9. public Student(String name, int number) {
  10. super();
  11. this.name = name;
  12. this.number = number;
  13. }
  14. // 将学生的两个私有属性进行对应的方法化
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public int getNumber() {
  22. return number;
  23. }
  24. public void setNumber(int number) {
  25. this.number = number;
  26. }

这是因为属性是private修饰的,不能再用 对象名.属性名 进行访问了,所以用方法来赋值以及访问。

5.封装代码

1、建立一个测试类

  1. public class Test01 {
  2. public static void main(String[] args) {
  3. }
  4. }

2、在测试类中构造一个学生对象(采用有参构造函数构造)

  1. public class Test01 {
  2. public static void main(String[] args) {
  3. Student student01 = new Student("张三", 123456);
  4. }
  5. }

3、使用get方法获取实例变量的值

  1. public class Test01 {
  2. public static void main(String[] args) {
  3. Student student01 = new Student("张三", 123456);
  4. String name = student01.getName();
  5. int number = student01.getNumber();
  6. System.out.println(name);
  7. System.out.println(number);
  8. }
  9. }

代码如下(测试结果):

  1. 张三
  2. 123456

终于将代码封装起来了,不在是那种public修饰的直接暴露的任人宰割的羔羊了。

三,打击到我的代码

题目是这样:
请用面向对象思想设计以下类及其相互关系。

1、成绩单。成绩单包括:语文、数学、英语成绩;可提供平均成绩,最低科目成绩,最高科目成绩。

2、家庭地址类。地址包括:省、市、街道、邮编

3、学生类。学生包括:姓名、学号、成绩,家庭住址

1.家庭地址类

创建一个地址类,里面加入四个属性省、市、街道、邮编,都是private修饰,所以用get set方法访问

  1. package com.etime07;
  2. public class Adress {
  3. private String province;
  4. private String city;
  5. private String street;
  6. private String email;
  7. public Adress() {
  8. }
  9. public Adress(String province, String city, String street, String email) {
  10. super();
  11. this.province = province;
  12. this.city = city;
  13. this.street = street;
  14. this.email = email;
  15. }
  16. public String getProvince() {
  17. return province;
  18. }
  19. public void setProvince(String province) {
  20. this.province = province;
  21. }
  22. public String getCity() {
  23. return city;
  24. }
  25. public void setCity(String city) {
  26. this.city = city;
  27. }
  28. public String getStreet() {
  29. return street;
  30. }
  31. public void setStreet(String street) {
  32. this.street = street;
  33. }
  34. public String getEmail() {
  35. return email;
  36. }
  37. public void setEmail(String email) {
  38. this.email = email;
  39. }
  40. }

2.成绩单类

创建一个成绩单类,里面加入三个属性语文、数学、英语成绩,都是private修饰,所以用get set方法访问,加上题目要求的几个方法,比如平均数等

  1. public class Report {
  2. private int chinese;
  3. private int math;
  4. private int english;
  5. public int ave() {
  6. return (chinese+math+english)/3;
  7. }
  8. public void max() {
  9. if(chinese>=math&&chinese>=english) {
  10. System.out.println("chinese 最高,分数为:"+chinese);
  11. }else if(math>=chinese&&math>=english) {
  12. System.out.println("math 最高,分数为:"+math);
  13. }else {
  14. System.out.println("english 最高,分数为:"+english);
  15. }
  16. }
  17. public void min() {
  18. if(chinese<=math&&chinese<=english) {
  19. System.out.println("chinese 最低,分数为:"+chinese);
  20. }else if(math<=chinese&&math<=english) {
  21. System.out.println("math 最低,分数为:"+math);
  22. }else {
  23. System.out.println("english 最低,分数为:"+english);
  24. }
  25. }
  26. public Report() {
  27. }
  28. public Report(int chinese, int math, int english) {
  29. super();
  30. this.chinese = chinese;
  31. this.math = math;
  32. this.english = english;
  33. }
  34. public int getChinese() {
  35. return chinese;
  36. }
  37. public void setChinese(int chinese) {
  38. this.chinese = chinese;
  39. }
  40. public int getMath() {
  41. return math;
  42. }
  43. public void setMath(int math) {
  44. this.math = math;
  45. }
  46. public int getEnglish() {
  47. return english;
  48. }
  49. public void setEnglish(int english) {
  50. this.english = english;
  51. }
  52. }

3.学生类

将地址类和成绩单类联系起来方便后续题目的实现

  1. public class Student {
  2. private String name;
  3. private int number;
  4. private Report report;
  5. private Adress adress;
  6. public Student() {
  7. }
  8. public Student(String name, int number, Report report, Adress adress) {
  9. super();
  10. this.name = name;
  11. this.number = number;
  12. this.report = report;
  13. this.adress = adress;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public int getNumber() {
  22. return number;
  23. }
  24. public void setNumber(int number) {
  25. this.number = number;
  26. }
  27. public Report getReport() {
  28. return report;
  29. }
  30. public void setReport(Report report) {
  31. this.report = report;
  32. }
  33. public Adress getAdress() {
  34. return adress;
  35. }
  36. public void setAdress(Adress adress) {
  37. this.adress = adress;
  38. }
  39. }

2.测试

  1. public class Test01 {
  2. public static void main(String[] args) {
  3. // TODO Auto-generated method stub
  4. Report report = new Report(95, 9, 93);
  5. Adress adress = new Adress("贵州", "六盘水", "凤凰新区", "012345");
  6. Student student01 = new Student("张三", 1234, report, adress);
  7. int result = student01.getReport().ave();
  8. System.out.println(result);
  9. student01.getReport().max();
  10. student01.getReport().min();
  11. }
  12. }

代码如下(输出):

  1. 65
  2. chinese 最高,分数为:95
  3. math 最低,分数为:9

终于把题目的所有要求都达到了,这里面用到最多的知识点就是封装,一开始就给记得不清了,写起来就有点费力。

总结

其实通过这一次小小的测试让我知道了,还是有很多不足,还有很多需要弥补的知识点,还要多多回顾,以免自己明明学过,就因为磨砺两可给弄不出来是真的难受,大家引我为荐吧。

发表评论

表情:
评论列表 (有 0 条评论,244人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue封装组件---js版

    什么是组件化: 组件化就是将一个页面拆分成一个个小的功能模块,每个功能模块完成属于自己这部分独立的功能,使得整个页面的管理和维护变得非常容易。 Vue组件化思想

    相关 JavaScript多态与封装

    1、静态语言类型和动态语言类型 编程语言按照数据类型可以分为静态语言类型和动态语言类型两大类。 1) 静态语言类型在编译时就已经确定变量的类型 优点:在编译时就能发现类型

    相关 QOS

    一QOS概述 (一)QOS的作用:解决特定数据的延迟、抖动、丢包问题。 (二)QOS的两种体系:    1、集成服务:给某种特殊需保证的数据划出特定的带宽。其

    相关 HTTP

    HTTP协议 http是网络上传输HTML的协议,用于浏览器和服务器之间的一种通信工具。 (google浏览器提供了一套web应用调试工具,适合web开发。ctrl+s

    相关 GC

    什么是GC? ØGC: Generational garbage collection垃圾回收,是.net中对内存管理的一种功能; Ø垃圾回收器跟踪并回收托管内存中分配的对