Java学习 | 面向对象 | 封装

未引入封装机制

package com.diamondk.javase.test01;
// 用户类
public class User {
	// 年龄
	int age;
}
package com.diamondk.javase.test01;
// 用户测试类
/**
 * 对于当前程序来说:
 * User类中的age属性在外部程序中可以随意访问,导致age属性的不安全。
 * 一个User对象表示一个用户,用户的年龄不可能为负数。
 * 以下程序当中年龄值为负数,程序运行的时候并没有报错,这是当前程序存在的缺陷。
 */

public class Test {
	public static void main(String[] args){
		// 创建一个User
		User user = new User();

		// 访问age
		// 读取age值(get)
		System.out.println("该用户的年龄为" + user.age);

		// 修改age值(set)
		user.age = 20;

		// 读取age值(get)
		System.out.println("该用户的年龄为" + user.age);

		// 修改age值(set)
		/**
		 * 这里的age属性显然是完全暴露给外部程序的
		 * 对于程序员来说可以操作Usr对象当中所有的细节,导致User中部分数据不安全。
		 * 建议对User类型进行封装,在外部程序中不能随意访问user对象当中的属性。这样可以保证属性的安全。
		 */
		user.age = -100;

		// 读取age值(get)
		System.out.println("该用户的年龄为" + user.age);
	}
}

引入封装机制

  • 面向对象包括三大特征:封装、继承、多态

  • 封装机制的好处

    • 封装之后,对于那个事物来说,看不到这个事物比较复杂的那一面,只能看到该事物简单的那一面。复杂性封装,对外提供简单的操作入口。黑相机就是一个很好的封装的案例,照相机的实现原理非常复杂,但是对于使用照相机的人来说,操作起来是非常方便的是非常便捷的。还有像电视机也是封装的,电视机内存实现非常复杂,但是对于使用者来说不需要关心内部的实现原理,只需要会操作遥控器就行。
    • 封装之后才会形成真正的“对象”,真正的“独立体”
    • 封装就意味着以后的程序可以重复使用。并且这个事物应该适应性比较强,在任何场合都可以使用。
    • 封装之后,对于事物本身,提高了安全性。【安全级别高】
  • 封装的步骤

    • 所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问

    • 对外提供简单的操作入口,也就是说以后外部程序要想访问age属性,必须通过这些简单的入口进行访问

      • 对外提供两个公开的方法,分别是get方法和set方法

        • 想读取age属性,调用get方法
        • 想修改age属性,调用set方法
      • get方法的命名规范

        public get+属性名首字母大写(){
        	return 属性名
        }
        
      • set方法的命名规范

        public set+属性名首字母大写([属性数据类型] 属性名){
        	this.属性名 = 属性名
        }
        
      • getter和setter方法没有static关键字

        • 没有static关键字修饰的方法怎么调用:引用.方法名(实参)
        • 有static关键字修饰的方法怎么调用:类名.方法名(实参)
      • getter和setter不用自己写,可以自动生成

        • 右键 - Generate - Getter and Setter
package com.diamondk.javase.test01;
// 用户类
public class User {
	// 年龄
	private int age;

	// getter
	public int getAge(){
		return age;
	}

	// setter
	public void setAge(int a){
		// age = age;
		// Java有就近原则,

		// 编写业务逻辑代码进行安全控制
		if(age < 0 || age > 150){
			System.out.println("对不起,您提供的年龄不合法");
			return;
		}
		// 如果程序执行到这里,说明age年龄是合法的,则进行赋值运算
		age = a;
	}
}
package com.diamondk.javase.test01;
// 用户测试类
public class UserTest {
	public static void main(String[] args){
		// 创建一个User
		User user = new User();

		/**
		 * 编译报错,age属性私有化,在外部程序中不能直接访问
		 * 从此之后age属性非常的安全,但是有点太安全了。
		 * 对于目前的程序来说,age属性彻底在外部访问不到了。
		 */
		// System.out.println("该用户的年龄为" + user.age);

		// 操作入口变成了只能通过set和get方法进行访问
		// 在set方法和get方法执行过程中可以进行安全过滤。

		// 修改
		user.setAge(-100);

		// 读取
		System.out.println(user.getAge());


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值