【JAVA面向对象之封装】

JAVA面向对象

对象属性赋值与读取

  • 新建一个Person01的类
  • 在类里面声明三个属性,分别是名字、 性别、 年龄
public class Person01 {
	/**
	 * 昵称
	 */
	String nickname;
	/**
	 * 性别 1 代表男性 0 代表女性
	 */
	int gender;
	/**
	 * 年龄
	 */
	int age;
}
  • 在Test里新建一个Person01Test的测试类
  • 把Person01这个类实例化出来两个对象person01和person02
  • 读取person01和person02两个对象的各有的属性
public class Person01Test {
	@Test
	public void test01() {
		Person01 person01 = new Person01();
		Person01 person02 = new Person01();
		System.out.println(person01.nickname);
		System.out.println(person02.nickname);
		System.out.println(person01.gender);
		System.out.println(person02.gender);
		System.out.println(person01.age);
		System.out.println(person02.age);	
	}
}

因为在Person01类中没有给属性固定的值,所以输出的是属性的默认值

null
null
0
0
0
0

给每个对象的属性赋值后再次读取

public class Person01Test {
	@Test
	public void test02() {
		Person01 person01 = new Person01();
		Person01 person02 = new Person01();
		person01.nickname = "张三";
		person02.nickname = "李四";
		System.out.println(person01.nickname);
		System.out.println(person02.nickname);
		person01.gender = 1;
		System.out.println(person01.gender == 1 ? "男" : "女");
		System.out.println(person02.gender == 1 ? "男" : "女");
		person01.age = 28;
		person02.age = 58;
		System.out.println(person01.age);
		System.out.println(person02.age);	
	}
}

输出被赋的值

张三
李四
男
女
28
58

封装

封装的概念

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

封装的优点

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

代码实现Java封装

  • 修改属性的可见性来限制对属性的访问(一般限private修饰符修饰属性)
public class Person02 {
   private String nickname;
   private int gender;
   private int age;
}
  • 将 Person02类中的属性设置为私有的,只能本类才能访问,其他类都访问不了
  • 对每个值属性提供对外的公共方法访问,分别创建一对赋值及取值的方法,用于对私有属性的访问
  • 因此,任何要访问类中私有成员变量的类都要通过getter和setter方法。
public class Person02 {
   private String nickname;
   private int gender;
   private int age;
   public void setNickname(String name) {
   	nickname = name;
   }
   public String getNickname() {
   	return nickname;
   }
   public void setGender(int sex) {
   	gender = sex;
   }
   public int getGender() {
   	return gender;
   }
   public void setAge(int nianling) {
   	age = nianling;
   }
   public int getAge() {
   	return age;
   }
}
  • 在Test里新建一个Person02Test的测试类
  • 把Person02这个类实例化出来两个对象person01和person02
  • 读取person01和person02两个对象的各有的属性
public class Person02Test {
	@Test
	public void test01() {
		Person02 person01 = new Person02();
		Person02 person02 = new Person02();
		System.out.println(person01.getNickname());
		System.out.println(person02.getNickname());
		System.out.println(person01.getGender());
		System.out.println(person02.getGender());
		System.out.println(person01.getAge());
		System.out.println(person02.getAge());	
	}
}

给每个对象的属性赋值后再次读取

public class Person02Test {
	@Test
	public void test02() {
		Person02 person01 = new Person02();
		Person02 person02 = new Person02();
		person01.setNickname("张三");
		person02.setNickname("李四");
		System.out.println(person01.getNickname());
		System.out.println(person02.getNickname());
		person01.setGender(1);
		System.out.println(person01.getGender() == 1 ? "男" : "女");
		System.out.println(person02.getGender() == 1 ? "男" : "女");
		person01.setAge(28);
		person02.setAge(58); 
		System.out.println(person01.getAge());
		System.out.println(person02.getAge());	
	}
}

输出被赋的值

张三
李四
男
女
28
58

封装中参数变量与成员变量名一致

当封装中参数变量与成员变量名一致时

public class Person03 {
	private String nickname;
	private int gender;
	private int age;
	public void setNickname(String nickname) {
		nickname = nickname;
	}
	public String getNickname() {
		return nickname;
	}
	public void setGender(int gender) {
		gender = gender;
	}
	public int getGender() {
		return gender;
	}
	public void setAge(int age) {
		age = age;
	}
	public int getAge() {
		return age;
	}
}

赋的值为无效值

public class Person03Test {
	@Test
	public void test02() {
		Person03 person01 = new Person03();
		Person03 person02 = new Person03();
		person01.setNickname("张三");
		person02.setNickname("李四");
		System.out.println(person01.getNickname());
		System.out.println(person02.getNickname());
		person01.setGender(1);
		System.out.println(person01.getGender() == 1 ? "男" : "女");
		System.out.println(person02.getGender() == 1 ? "男" : "女");
		person01.setAge(28);
		person02.setAge(58); 
		System.out.println(person01.getAge());
		System.out.println(person02.getAge());	
	}
}

输出被赋的值为默认值

null
null
女
女
0
0

封装中this的含义

this 方法的调用者 谁调用我 我就是谁

在此处this的含义是调用本类中的成员变量

public class Person04 {
	private String nickname;
	private int gender;
	private int age;
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	public String getNickname() {
		return nickname;
	}
	public void setGender(int gender) {
		this.gender = gender;
	}
	public int getGender() {
		return gender;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getAge() {
		return age;
	}
}
  • 在Test里新建一个Person04Test的测试类
  • 把Person04这个类实例化出来两个对象person01和person02
  • 给每个对象的属性赋值
  • 读取person01和person02两个对象的各有的属性
public class Person04Test {
	@Test
	public void test02() {
		Person04 person01 = new Person04();
		Person04 person02 = new Person04();
		person01.setNickname("张三");
		person02.setNickname("李四");
		System.out.println(person01.getNickname());
		System.out.println(person02.getNickname());
		person01.setGender(1);
		System.out.println(person01.getGender() == 1 ? "男" : "女");
		System.out.println(person02.getGender() == 1 ? "男" : "女");
		person01.setAge(28);
		person02.setAge(58); 
		System.out.println(person01.getAge());
		System.out.println(person02.getAge());	
	}
}

输出被赋的值

张三
李四
男
女
28
58

Eclipse中getter和setter方法生成的多种方式

方式一
  • 新建一个Person的类
  • 在类里面声明三个属性
  • 点击任意属性左侧的黄色叹号小灯泡选择**Create getter and setter for ‘nickname’… **后点击回车键
    快速创建getter and setter
  • 勾选getter name 和setter name然后点击ok
    快速创建getter and setter
  • 该属性nicknamegetter and setter已自动生成

快速创建getter and setter

  • 使用同样的方式可以快速创建其他属性的getter and setter

注意:该方式效率不高

方式二
  • 新建一个Person的类
  • 在类里面声明三个属性
  • 右键选择Source或者使用键盘Alt+Shift+s点击**Generate Getter and Setters…**后点击回车键快速创建getter and setter
  • 根据右侧选项点击勾选需要生成getter和setter的属性,然后点击Generate快速创建getter and setter
  • 其各属性的getter and setter已快速自动生成
    快速创建getter and setter
  • 方式二与方式一相对比,方式二更便捷
方式三——lombok引入
  • 以上两种方式是开发工具生成的
  • 如果遇到属性过多的情况可以使用插件lombok引入
下载插件lombok
  • lombok插件下载地址: mvnrepository.
  • 搜索栏输入lombok点击Search
    lombok引入
  • 进入后点击Project Lombok
    lombok引入
  • 然后点击最新1.18.22版本
    lombok引入
  • 第一步把依赖复制到项目pom文件中然后保存
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
    <scope>provided</scope>
</dependency>

lombok引入

  • 第二步下载Files右侧的jar文件到D:\setup目录中
    lombok引入
配置lombok
  • 下载好lombok-1.18.22.jar文件后在jar文件D:\setup目录中调出控制台lombok配置
  • 在控制台输入并运行jar文件
java -jar lombok-1.18.22.jar
  • 输入点击回车后在新跳转的画面点击确定
    lombok配置
  • 然后点击本地变量找到eclipse文件路径
    lombok配置
  • 点击安装和升级,最后点击退出安装即可
    lombok配置
  • 下载配置完成后重新启动eclipse开发工具
  • 在建好的项目类中可以快速的给所有属性创建getter and setter
  • 在类的上方导入这个依赖即可
package com.lihaozhe.day17.bean;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Person06 {
	private String nickname;
	private int gender;
	private int age;
}
  • 此时右侧可以看到已创建的getter and setter
    lombok引入

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rita_zzf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值