前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象的三大特征-封装

面向对象的三大特征-封装

作者头像
星哥玩云
发布2022-09-08 13:19:25
5030
发布2022-09-08 13:19:25
举报
文章被收录于专栏:开源部署

1、封装概述

1.1、什么是封装

成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

1.2、封装的原则

将属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

1.3、封装步骤

private修饰成员变量

对需要访问的成员变量,提供对应的一对get/set方法

1.4、案例

**需求:**编写一个类中得到生日的方法

分析:

① 类的成员变量可以成为只读或者只写的。比如用:访问器getXxxx();或者修改器setXxxx();

② 类可以对储存在其中的成员变量中的内容有一个整体的控制。可以根据访问修饰符的提点在其它类中调用该类中的属性和行为。

③类的用户不需要知道类是如何储存数据的。

代码语言:javascript
复制
public String getBirthday(){
	return year + "-" + month + "-" + day;
}
public void setBirthday(String birthday){
	//拆分字符串,分别取出年月日,给year、month、day进行赋值
}

而在外部调用这个方法的时候
this.getBirthday();
this.setBirthday("1990-9-9");
此时就体现出外部是不知道如何储存birthday这个方法的,用户只能调用它。

2、封装实现

2.1、private修饰属性

修改属性的可见性来限制对属性的访问(一般限制为private)

代码语言:javascript
复制
public class Person{
 		private String name;
 		private int age; 
}

这段代码中,将nameage属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

2.2、公共方法访问

对每个值属性提供对外的公共方法访问,也就是创建一对赋值取值方法,用于对私有属性的访问。

代码语言:javascript
复制
public class Person{ 
		private String name; 
		private int age;
		public int getAge(){
  			return age; 
		}
		public String getName(){ 
			return name; 
		}
		public void setAge(int age){ 
			this.age = age; 
		}
		public void setName(String name){ 
			this.name = name; 
		} 
}

我们将name,age属性私有化,那么除了Person这个类以外其他地方都不能使用他,所有这个时候,我们选择了全局的set,get方法,来为我们的属性name,age来存放值和取值。

采用this关键字是为了解决成员变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

2.3、案例

代码语言:javascript
复制
public class Encap{ 
		private String name; 
		private String idNum; 
		private int age; 
		//声明set,get方法初始化与获取
		public int getAge(){ 
			return age; 
		} 
		public String getName(){ 
			return name; 
		} 
		public String getIdNum(){
 			return idNum;
		} 
		public void setAge( int newAge){ 
			age = newAge; 
		} 
		public void setName(String newName){
			name = newName; 
		} 
		public void setIdNum( String newId){
 			idNum = newId; 
		}
}
代码语言:javascript
复制
public class EncapDemo{ 
		public static void main(String args[]){ 
			Encap encap = new Encap(); 
			//创建对象,通过对应的set方法,初始化
			encap.setName("James"); 
			encap.setAge(20);
      encap.setIdNum("12343ms"); 
			System.out.print("Name : " + encap.getName()+ " Age : "+ encap.getAge()); 
		} 
}

运行结果:

我们在调用我们的属性name,age的时候,使用了,set,get方法,那么这就是一个典型的封装。

3、javaBean

JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的 set 和 get 方法。

3.1、格式

代码语言:javascript
复制
public class ClassName{ 
 //成员变量
 //构造方法 
    //无参构造方法【必须】 每个类都有一个默认的无参的构造方法
    //有参构造方法【建议】 
 //成员方法
 //getXxx()
 //setXxx()
}

3.2、案例

需求:编写一个javaBean规范的类,以动物类为例。

代码语言:javascript
复制
public class DongWu{
  private String name;
  private int age;
  //构造方法,默认可不写
  public DongWu(){
  }
  //有参的构造方法
  public DongWu(String name,int age){
    this.name=name;
    this.age=age;
  }
  //成员方法
	public void setName(String name) {
		this.name = name; 
  }
	public String getName() { 
    return name;
	}
	public void setAge(int age) { 
    this.age = age;
	}
	public int getAge() { 
    return age;
	}
}
代码语言:javascript
复制
public class DongWuDemo {
    public static void main(String[] args) {
        //无参构造使用
        DongWu s= new DongWu();
        s.setName("猫");
        s.setAge(2);
        System.out.println(s.getName()+"‐‐‐"+s.getAge());
    }
}

运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、封装概述
    • 1.1、什么是封装
      • 1.2、封装的原则
        • 1.3、封装步骤
          • 1.4、案例
          • 2、封装实现
            • 2.1、private修饰属性
              • 2.2、公共方法访问
                • 2.3、案例
                • 3、javaBean
                  • 3.1、格式
                    • 3.2、案例
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档