• 【java学习】面向对象特征之一:封装和隐藏(23)



    信息的封装和隐藏

        Java 中通过将数据声明为私有的 (private) 变量, 再提供 公共的( public )方法getXxx()setXxx() 实现对该属性的操作,以实现下述目的:

    • 隐藏一个类中不需要对外提供的实现细节;
    • 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作
    • 便于修改,增强代码的可维护性;

    举例说明:
    创建一个person类

    package day06;
    
    public class Person {
    	public int age;//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题。所以需要封装和隐藏
    	
    	public void printAge() {
    		System.out.println("年龄是:" + age);
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    编写Test.java对Person类进行调用:

    package day06;
    
    public class Test {
    	public static void main(String[] args) {
    		Person p = new Person();
    		p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
    		
    		p.printAge();
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行结果:
    在这里插入图片描述
        但是,这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑

    对上述代码进行改写:使用封装和隐藏
    改写Person类:

    package day06;
    
    public class Person {
    //	public int age;//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题。所以需要封装和隐藏
    	
    	//我们需要对这样的不能让调用者随意使用的属性做封装和隐藏
    	private int age;
    	
    	public void printAge() {
    		System.out.println("年龄是:" + age);
    	}
    	
    	public void setAge(int a) {
    		if(a <= 150 && a >= 0) {
    			age = a;
    		}else {
    			System.out.println("输入的年龄:" + a + "不在0~150之间");
    		}
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    改写Test.java:
    情况1:这次仍然将age赋值-100,看一下运行结果会有什变化?

    package day06;
    
    public class Test {
    	public static void main(String[] args) {
    		Person p = new Person();
    //		p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
    		//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题
    		
    		p.setAge(-100);
    		p.printAge();
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果:
    在这里插入图片描述
    因为-100不在Person类中setAge所设定的年龄范围,所以最后输出的是age的默认值0。

    情况2:将age赋值12

    package day06;
    
    public class Test {
    	public static void main(String[] args) {
    		Person p = new Person();
    //		p.age = -100;//这样的情况,程序是对的,能执行,但是 年龄=-100 不符合正常逻辑
    		//像这种情况,是把类的属性开发出来,让调用者随意使用,这样会有问题
    		
    		p.setAge(12);
    		p.printAge();
    	}
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果:
    在这里插入图片描述

    小结:
    在这里插入图片描述

  • 相关阅读:
    【C++内存管理侯捷】---学习笔记(下)malloc/free,loki allocator,other issue
    使用小程序实现左侧菜单,右侧列表双向联动效果
    利刃出鞘 | 从五大核心技术来看Bonree ONE 2.0的全球竞争力
    墨水屏技术在贴片厂的创新应用探索
    【AI视野·今日NLP 自然语言处理论文速览 第八十三期】Wed, 6 Mar 2024
    CSDN机器学习常用科学公式写法汇总【更新中】
    前端总结35.JS封装事件库
    A-Level经济真题(4)
    数字精度问题
    OceanBase开发者大会2023届视频及PPT汇总
  • 原文地址:https://blog.csdn.net/weixin_44883789/article/details/133771822