封装和包,访问权限修饰符

本文介绍了面向对象编程中的封装概念,包括隐藏属性、使用getter和setter方法以及属性控制。通过示例展示了如何在Java中实现封装,强调了封装在软件设计中的重要性,如保护数据、提高代码复用性和系统独立性。此外,还提及了包的作用、访问权限控制以及静态变量的使用。
摘要由CSDN通过智能技术生成
封装的概念:
        将类的某些信息给他隐藏在类的内部,不循序外部程序直接访,而是通过该类提供的方法来实现对隐藏信息的操作和访问
封装的两大原则:
    把尽可能多的东西藏起来,对外提供便捷的接口
    把所有的属性隐藏起来
封装的步骤
    1.用private 隐藏属性:防止错误的修改
    2.用getter、setter方法 ,用于属性的读写
    3.在getter、setter方法中加入属性控制语句:对属性值的合法性判断
封装的好处:
    便于使用者正确使用系统,防止错误修改属性
    有助于系统之间的松耦合,提高系统的独立性
    提高了软件的可重用性
    降低了构建大型系统的风险

 

 

 

 

 //先隐藏属性
       private String name="无名氏";//名字
       private int health=100;//健康值:默认值是100,健康值在0-100之间,小于60为不健康
       private int love=0;//亲密度
       private String  sex="Q仔";//品种
       
       
       
       
       //创建setter方法
       public void setName(String name){
             this.name=name;
       }
       //创建getter方法
       public String getName(){
             return this.name;
       }
       
       
       
       //创建setter方法
       public void setHealth(int health){
             if(health<0||health>100){
                    System.out.println("请输入0-100的数");
                    this.health=60;
                    return;
             }
             this.health=health;
       }
       //创建getter方法
       public int getHealth(){
             return this.health;
       }
       
       
       //创建setter方法
       public void setLove(int love ){
             if(love<0||love>100){
                    System.out.println("请输入0-100的数");
                    this.love=60;
                    return;
             }
             
             this.love=love;
       }
       //创建getter方法
       public int getLove(){
             return this.love;
       }
       
       
       //创建setter方法
       public void setSex(String sex){
             this.sex=sex;
       }
       //创建getter方法
       public String getSex(){
             return this.sex;
       }
       
       
       /*
        * 输入企鹅的信息
        */
       public void print(){
             System.out.println("宠物自述\n我的名字叫做"+this.name+",健康值"+this.health+",和主人的亲密度是"+this.love+",我是一只"+this.sex);
             }private String name="无名氏";//名字
	public void setName(String  name){
		this.name=name;
		}
	public String getName(){
		return this.name;
	}
	
	//隐藏属性
	private int health=100;//健康值:默认值是100,健康值在0-100之间,小于60为不健康
	
	//创建setter方法:属性赋值:属性的具体操作(正确判断等)
	public void setHealth(int health){
		if(health<0&&health>100){
			
			this.health=60;
			return;
		}
		this.health=health;
		}
	//创建getter语句
	public int getHealth(){
		return this.health;
	}
	
	private int love=0;//亲密度
	public void setLove(int love){
		this.love=love;
	}
	public int getLove(){
		return this.love;
	}
	private String  strain="阿拉斯加";//品种
	public void setStrain(String strain){
		this.strain=strain;
	}
	public int getStrain(){
		return this.getStrain();
	}
	/*
	 * 
	 * 输出狗狗信息
	 * 
	 */
	public void print(){
		System.out.println("宠物自述\n我的名字叫做"+this.name+"健康值"+this.health+"和主人的亲密度是"+this.love+"我是一只"+this.strain);
		}


测试类
       System.out.println("欢迎您来到小玉宠物店!");
             System.out.println("请输入你要领养动物的名字");
             //创建Scanner类获取值
             Scanner sc = new Scanner(System.in);
             String name = sc.next();
             System.out.println("请选择你要领养宠物的类型:(1.狗狗2.企鹅3.香猪)");
             int num=sc.nextInt();
             int health;
             //选择你要买的动物
             switch(num){
                    case 1:
                           System.out.println("请选择小狗品种:(1.哈士奇2.拉布拉多)");
                           int strainId = sc.nextInt();
                           String strain = (strainId==1)?"哈士奇":"拉布拉多";
                           System.out.println("请输入小狗健康值:");
                           health =sc.nextInt();
                           //创建Dog类的对象
                           Dog dog =new Dog();
                           dog.setName(name);
                           dog.setHealth(health);
                           dog.setStrain(strain);
                           dog.print();
                           break;
                           
                    case 2:
                           System.out.println("请选择企鹅性别:(1.公的2.母的)");
                           int sex = sc.nextInt();
                           String sexs = (sex==1)?"公的":"母的";
                           System.out.println("请输入企鹅健康值:");
                            health =sc.nextInt();
                           //创建penguin类的对象
                           Penguin p = new Penguin();
                           p.setHealth(health);
                           p.setName(name);
                           p.setSex(sexs);
                           p.print();
                           break;
                    case 3:
                           System.out.println("请选择香猪性别:(1.公的2.母的)");
                           int sexId= sc.nextInt();
                           String sex1 = (sexId==1)?"公的":"母的";
                           System.out.println("请输入香猪健康值:");
                            health =sc.nextInt();
                           //创建pig类的对象
                           Pig pig = new Pig();
                           pig.setHealth(health);
                           pig.setName(name);
                           pig.setSex(sex1);
                           pig.pigPrint();
                           break;
                           
                    default:
                           System.out.println("没有此类型的宠物");
                           break;
             
             }
包的作用:
    允许组成较小的单元(类似文件夹),易于找到和使用相应的文件
    防止命名冲突区分名字相同的类
    有助于实施访问权限控制
创建包:
    作为java源代码第一条语句
    用package声明包,以分号结尾
包的命名规范
    包名有小写字母组成,不能一圆点开头或结尾
    报名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
    包后续部分以不同机构内部的ifang不同而不同
JDk提供基本包
   Java.lang:虚拟机自动引入
    java.util:提供一些实用类
    Java.io:输入,输出
使用包的注意事项
    一个类同时引用了两个来自不同的同类名
        必须通过完整类名来区分
    每个包都是独立的,顶层包不会包含自爆的类
    package和import的顺序是固定的
        package必须位于第一行(忽略注释行)
        只允许有一个package语句
        其次是import
        接着是类的声明
访问权限控制
    类的访问修饰符
        public修饰符:共有访问级别
        默认修饰符:包级私有访问级别
修饰符/作用域
同一个类中
同一个包中
子类中
任何地方
public
可以
可以
可以
可以
protected
可以
可以
可以
不可以
默认修饰符
可以
可以
不可以
不可以
private
可以
不可以
不可以
不可以
static可以用来修饰
    成员变量:静态变量, 可以直接通过类名进行访问
    成员方法:静态方法,可以直接通过类名访问
    代码块:静态代码块,当java虚拟机加载类时,就会执行该代码块
Jvm加载类时,加载静态代码块
    如果有多个静态块,按顺序加载
    每个静态代码只会被执行一次
static变量
    类成员变量包括
        类变量(静态变量)
            被static修饰的变量
            在内存中只有一个拷贝
            类内部,可在任何方法内直接访问静态变量
            其他类中,可以直接通过类名访问
        实力变量
            没有被static修饰的变量
            每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响
static 变量的作用:
        能被类的所有实例共享,可作为实例之间交流的共享数据
        如果类中所有的实例变量都包含一个相同的常量的属性,可以把这个属性定义为静态常量类型,从而节省空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值