Java中封装的概念

叁歲伎倆 2023-10-04 12:28 148阅读 0赞
2.封装
2.1.步骤
  1. 使用 private 关键字来修饰成员变量。
  2. 对需要访问的成员变量,提供对应的一对 getXxx 方法 、 setXxx 方法。
2.2.private关键字
  1. private是一个权限修饰符,代表最小权限;
  2. 可以修饰成员变量和成员方法;
  3. 被private修饰后的成员变量和成员方法,只在本类中才能访问。
  4. 权限修饰符的对比:

    • public:任意类均访问,实际就是没有限制访问权限
    • protected:同包中的其他类,和不同包的(可见)子类均可见,一部分类可以访问到,一部分不行。
    • default(默认权限,隐式定义,不写任何关键字),同包中的其他类可见,不关心是不是子类
    • private,仅对同类中的其他成员可见









































      public protected (default) private
      同一类中
      同一包中
      不同包的子类
      不同包中的无关类

      定义上含糊的说了,protected在不同包的子类中可以访问但实际上不同包的子类,仍然可以细分

      • 不同包的子类中,创建父类对象,用父类对象访问protected成员
      • 不同包的子类中,创建子类对象,用子类对象访问protected成员
      • 不同包的子类中,创建该类的其他子类对象,用这个其他子类对象访问protected成员

        后续在继承中补充说明。

    使用 private 修饰成员变量,并提供 getXxx 方法 / setXxx 方法,可以访问成员变量,代码如下:

    //private 数据类型 变量名 ;
    public class Student {

  1. private String name;
  2. private int age;
  3. public void setName(String n) {
  4. name = n;
  5. }
  6. public String getName() {
  7. return name;
  8. }
  9. public void setAge(int a) {
  10. age = a;
  11. }
  12. public int getAge() {
  13. return age;
  14. }
  15. }
2.3.this关键字
  • this代表所在类的当前对象的引用(地址值),即对象自己的引用。

    注意事项:方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。

  • 使用 this 修饰方法中的变量,解决成员变量被隐藏的问题,代码如下:

    public class Student {

  1. private String name;
  2. private int age;
  3. public void setName(String name) {
  4. //name = name;
  5. this.name = name;
  6. }
  7. public String getName() {
  8. return name;
  9. }
  10. public void setAge(int age) {
  11. //age = age;
  12. this.age = age;
  13. }
  14. public int getAge() {
  15. return age;
  16. }
  17. }
2.4.构造方法
  • 构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void。使用
    构造方法后,代码如下:

    public class Student {

  1. private String name;
  2. private int age;
  3. // 无参数构造方法
  4. public Student() {
  5. }
  6. // 有参数构造方法
  7. public Student(String name,int age) {
  8. this.name = name;
  9. this.age = age;
  10. }
  11. }

注意事项:

  1. 如果你不提供构造方法,系统会给出无参数构造方法。
  2. 如果你提供了构造方法,系统将不再提供无参数构造方法。
  3. 构造方法是可以重载的,既可以定义参数,也可以不定义参数。
  4. 无论是否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,
    一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。
2.5.标准代码—JavaBean
  • JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无
    参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

    public class ClassName{

    1. //成员变量
    2. //构造方法
    3. //无参构造方法【必须】
    4. //有参构造方法【建议】
    5. //成员方法
    6. //getXxx()
    7. //setXxx()

    }

  • 编写符合 JavaBean 规范的类,以学生类为例,标准代码如下:

    public class Student {

    1. //成员变量
    2. private String name;
    3. private int age;
    4. //构造方法
    5. public Student() {
    6. }
    7. public Student(String name,int age) {
    8. this.name = name;
    9. this.age = age;
    10. }
    11. //成员方法
    12. publicvoid setName(String name) {
    13. this.name = name;
    14. }
    15. public String getName() {
    16. return name;
    17. }
    18. publicvoid setAge(int age) {
    19. this.age = age;
    20. }
    21. publicint getAge() {
    22. return age;
    23. }

    }

  • 测试类,代码如下:

    public class TestStudent {

    1. public static void main(String[] args) {
    2. //无参构造使用
    3. Student s= new Student();
    4. s.setName("柳岩");
    5. s.setAge(18);
    6. System.out.println(s.getName()+"‐‐‐"+s.getAge());
    7. //带参构造使用
    8. Student s2= new Student("赵丽颖",18);
    9. System.out.println(s2.getName()+"‐‐‐"+s2.getAge());
    10. }

    }

2.6.匿名对象
  • 应用场景:应对于某个对象只应用一次的场景。

    注意事项:匿名对象可以作为参数和返回值

    • 作为参数

      1. class Test1 {
      2. public static void main(String[] args) {
      3. // 普通方式
      4. Scanner sc = new Scanner(System.in);
      5. input(sc);
      6. //匿名对象作为方法接收的参数
      7. input(new Scanner(System.in));
      8. }
      9. public static void input(Scanner sc){
      10. System.out.println(sc);
      11. }
      12. }
    • 作为返回值

      1. class Test2 {
      2. public static void main(String[] args) {
      3. // 普通方式
      4. Scanner sc = getScanner();
      5. }
      6. public static Scanner getScanner(){
      7. //普通方式
      8. //Scanner sc = new Scanner(System.in);
      9. //return sc;
      10. //匿名对象作为方法返回值
      11. return new Scanner(System.in);
      12. }
      13. }

发表评论

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

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

相关阅读

    相关 概念

      封装:         概念:            将类的某些信息隐藏在类内部,不允许外部程序直接访问,            而是通过该类提供的方法来实现对隐藏

    相关 Java深入浅出

    前言 封装是一种隐藏信息的技术,是将一个系统中的结构和行为通过类来划分的过程。即通过定义一组类,将特定的数据组合到某一个类中,形成一个整体,将该隐藏的数据进行保护,只对外

    相关 Java一个理解

    真正的封装是什么意思 1. 封装意味着对象的属性值是不能够改变的。 2. 一旦需要改变一个对象的值,那么就违背了封装的原则。 封装的属性理解 1. 使用se