Java面向对象之封装及相关知识合集


一、封装(Encapsulation)

1.封装的相关概念

  • 在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法
    封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
    要访问该类的代码和数据,必须通过严格的接口控制。
    封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
    适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性1

2.封装的优点

  1. 良好的封装能够减少耦合。
  2. 类内部的结构可以自由修改。
  3. 可以对成员变量进行更精确的控制。
  4. 隐藏信息,实现细节。

3.封装实现步骤

1.修改属性的访问权限为private

public class Person {
    
    
    private String name;
    private int age;
}

2.当属性设置为private(私有)后,属性只能在本类中访问,其它类访问不了,因而实现了对信息的隐藏。如果要使其它类继续访问必须为私有属性添加setter和getter方法

public class Person{
    
    
    private String name;
    private int age;public void setAge(int age){
    
    
      this.age = age;
      //this.属性 指的是成员变量
      //this关键字可以解决成员变量和局部变量重名冲突问题
    }public int getAge(){
    
    
      return age;
    }public void setName(String name){
    
    
      this.name = name;
    }
    
    public String getName(){
    
    
      return name;
    }
    
}

3.有了Person类,新建一个测试类PersonTest类,解释说明一下Person类中被private修饰的成员变量,是如何通过其它类进行访问的。

public class PersonTest {
    
    
    public static void main(String[] args) {
    
    
    	//创建对象Person类的对象
        Person p = new Person();
        //使用对象名.setter方法对成员变量赋值
        p.setName("李四");
        p.setAge(18);
        //使用对象名.getter方法取出成员变量的值
        System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
    }
}

程序运行结果如下:

姓名:李四,年龄:18

【tips】
方法也是一种封装。

二、private关键字

1.private的作用

  • 是一个权限修饰符,用于修饰成员变量和成员方法。
  • 私有是针对类,而不是针对对象。
  • 被私有化的成员只在本类中有效。

2.private使用实例

public class Person {
    
    
//    String name;
//    int age;
    private String name;
    private int age;
}

被private修饰后在本类中可以直接使用成员变量,在其它类中使用必须使用setter和getter方法

    public static void main(String[] args) {
    
    
        System.out.println("姓名:"+name+'\n'+"年龄:"+age);
    }

setter方法必须有参数,且类型与成员变量一致
getter方法必须有返回值,且返回值类型与成员变量一致

    public void setName(String name){
    
    
        this.name = name;
    }

    public String getName(){
    
    
        return name;
    }
    
    public void setAge(int age) {
    
    
       this.age = age;
    }

    public int getAge(){
    
    
        return age;
    }

【tips】
可以在setter和getter方法中对数据的合理性进行定义
例如在setAge()中对年龄数值的合理性进行定义

    public void setAge(int age) {
    
    
        if (age >= 0 && age <120) {
    
    
            this.age = age;
        }else{
    
    
            System.out.println("数据不合理!");
        }
    }

在其它类中使用Person类中被private修饰的变量

public class PersonTest {
    
    
    public static void main(String[] args) {
    
    
    	//创建对象Person类的对象
        Person p = new Person();
        //使用对象名.setter方法对成员变量赋值
        p.setName("李四");
        p.setAge(20);
        //使用对象名.getter方法取出成员变量的值
        System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
    }
}

程序运行结果如下:

姓名:李四,年龄:20

三、this关键字

1.this的适用范围

1.this关键字指向的是当前对象的引用
2.this关键字的使用一定在方法内部
3.this不能用于静态方法

2.this关键字的使用

变量

当方法的局部变量和成员变量同名时,会优先使用局部变量(就近原则)
使用this.属性,就代表使用成员变量

public class Person {
    
    
    private String name;
    public void setName(String name){
    
    
    this.name = name;
    }
}

方法

(1) this.方法名称
访问本类的成员方法

(2) this()
访问本类的构造方法
注意事项:

  • 1.()中可以有参数的 如果有参数 就是调用指定的有参构造
  • 2.this()只能写在构造方法中
  • 3.必须是构造方法中的第一条语句

四、构造方法

构造方法是专门用来创建对象的方法,当通过关键字new来创建对象时,就是调用构造方法

构造方法定义格式:

public 类名称([参数类型 参数名称,参数类型 参数名称,...]{
    
    
			//参数可有可无
			//参数个数和类型可以根据需要定义
	方法体;
}

名称必须和所在的类名称完全一样。
没有返回值类型。
编译器默认存在一个无参构造方法。
一旦编写了至少一个构造方法,默认无参构造方法消失。

五、定义一个标准类(Java Bean)

1.标准类的组成

  • 所有成员变量都要使用private关键字修饰
  • 每一个成员变量都需要有setter和getter方法
  • 编写一个无参构造方法
  • 编写一个全参构造方法

2.标准类示例

import java.util.Date;

public class Person {
    
    
    private String name;
    private String sex;
    private Date birthday;
    private int age;

	//无参构造方法
    public Person() {
    
    
    }

	//全参构造方法
    public Person(String name, String sex, Date birthday, int age) {
    
    
        this.name = name;
        this.sex = sex;
        this.birthday = birthday;
        this.age = age;
    }

	//setter和getter方法
    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }
	
	//setter和getter方法
    public String getSex() {
    
    
        return sex;
    }

    public void setSex(String sex) {
    
    
        this.sex = sex;
    }
	
	//setter和getter方法
    public Date getBirthday() {
    
    
        return birthday;
    }

    public void setBirthday(Date birthday) {
    
    
        this.birthday = birthday;
    }
	
	//setter和getter方法
    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
}


  1. 菜鸟教程 — Java封装 ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_44580492/article/details/105855912