• 【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

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

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

  • 相关阅读:
    MOS晶体管单元电路的最佳二维公共质心布局生成
    如何安装RAD Studio 11.2(delphi 11.2)
    7--OpenCV:图像基本操作之①截取②掩膜 操作
    宿舍是我的第二个家
    【数据结构】查找总结
    神经网络预测结果怎么看,神经网络如何进行预测
    项目讲解之火爆全网的开源后台管理系统RuoYi
    商业智能平台BI 商业智能分析平台 如何选择合适的商业智能平台BI
    Junit执行源码分析,Junit是怎么跑起来的(二)
    java反射机制详解
  • 原文地址:https://blog.csdn.net/weixin_44883789/article/details/133771822