• 【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++STL的六大组件
    PlantUML Integration 编写短信服务类图
    R语言ggplot2可视化:使用ggcharts包的pyramid_chart函数可视化人口金字塔图(pyramid chart)
    RunApi在发送请求的时候添加Token
    Rabbit MQ详解
    【递归、搜索与回溯算法】第七节.257. 二叉树的所有路径和46. 全排列
    【大数据环境下的隐私安全的图像特征提取及应用】原创学位论文
    无人值守机房浸水监测数据采集网关
    05 创建不可修改的Lists, Sets 和 Maps
  • 原文地址:https://blog.csdn.net/weixin_44883789/article/details/133771822