java-封装及其this 指针

java-封装及其this 指针

Java 封装


在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  • 1. 良好的封装能够减少耦合。

  • 2. 类内部的结构可以自由修改。

  • 3. 可以对成员变量进行更精确的控制。

  • 4. 隐藏信息,实现细节。

 

实现Java封装的步骤

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

例如:

public class Person { private String name; private int age; }

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

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

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;
    }
}

一般情况下:主要用于将成员变量私有化,最好再提供对应的set(),get()方法。提高对数据访问的安全性。

 

this指针:

(1)this:代表所在类的对象的引用
方法被哪个对象调用,this就代表那个对象
(2)使用this的情况:
局部变量和成员变量重名。这时候的this.变量名,代表的是所在类的对象的引用。

不加this

/*
	创建一个类。然后
	this 指针的作用就是用来区分两个相同变量的区别
	如果不用的话,就搞的是默认值
*/

class  person{
	//一般情况下,数据变量都得用private 
	private String  name;
	private  int age;
	//一个成员变量一般情况下,有一个获取成员变量,一个得到成员变量
	public void setname(String n){
		name = n;
	}
	public String getname(){
		return name;
	}
	public void setage(int k){
		age = k;
	}
	public int getage(){
			return age;
	}
	//空参构造函数
	person (){
		
	}
	//带参构造函数,函数重载
	person (String name,int age ){
		name = name;
		age = age;
	}
	
	public void talk(){
		System.out.println(name + "," + age +"岁会说话") ;
	}
	
}
class This {
	public static void main(String[] args){
		/*person gupei = new person();
		gupei.setname("王二麻子");
		System.out.println(gupei.getname());
		gupei.setage(18);
		System.out.println(gupei.getage());
		
		*/
		person gupei = new person("王二麻子",18);
		gupei.talk();
		
	}
	
}

结果会以字符串和整型的初始化来表示,没有达到想要的效果。
 

/*
	创建一个类。然后
	this 指针的作用就是用来区分两个相同变量的区别
	如果不用的话,就搞的是默认值
*/

class  person{
	//一般情况下,数据变量都得用private 
	private String  name;
	private  int age;
	//一个成员变量一般情况下,有一个获取成员变量,一个得到成员变量
	public void setname(String n){
		name = n;
	}
	public String getname(){
		return name;
	}
	public void setage(int k){
		age = k;
	}
	public int getage(){
			return age;
	}
	//空参构造函数
	person (){
		
	}
	//带参构造函数,函数重载
	person (String name,int age ){
		this.name = name;
		this.age = age;
	}
	
	public void talk(){
		System.out.println(name + "," + age +"岁会说话") ;
	}
	
}
class This {
	public static void main(String[] args){
		/*person gupei = new person();
		gupei.setname("谷沛");
		System.out.println(gupei.getname());
		gupei.setage(18);
		System.out.println(gupei.getage());
		
		*/
		person gupei = new person("谷沛",18);
		gupei.talk();
		
	}
	
}

这样就达到了初始化的目的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114847.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • matlab:lena图像在空域和频域的均匀滤波

    matlab:lena图像在空域和频域的均匀滤波文章目录前言一、空域滤波二、频域滤波三,matlab代码结果前言卷积:函数空间域的卷积的傅里叶变换是函数傅里叶变换的乘积。对应地,频率域的卷积与空间域的乘积存在对应关系。给定频率域滤波器,可对其进行傅里叶逆变换得到对应的空域滤波器;滤波在频域更为直观,但空域适合使用更小的滤波模板以提高滤波速度。因为相同尺寸下,频域滤波器效率高于空域滤波器,故空域滤波需要一个更小尺寸的模板近似得到需要的滤波结果。一、空域滤波将模板在图像中逐像素移动,将卷积核的每个元素分别和图像矩阵对应位置元素相乘并将结果累加,

    2022年6月19日
    35
  • Android定时器「建议收藏」

    Android定时器「建议收藏」定时器Timertimer=newTimer();TimerTasktimerTask=newTimerTask(){@Overridepublicvoidrun(){Log.v("jiangwangli","开始运行");}…

    2022年7月25日
    6
  • android之存储篇_SQLite存储方式「建议收藏」

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:    NULL: 空值    INTEGER: 整数    REAL: 浮点数    TEXT: 字符串    BLOB: 大数据  在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE类型则可以拥有特

    2022年3月10日
    35
  • springboot 获取错误信息 exception message

    springboot 获取错误信息 exception message

    2021年3月12日
    167
  • 1、Python 日期时间格式化输出

    1、Python 日期时间格式化输出

    2021年10月22日
    44
  • Notepad++ 下载

    Notepad++ 下载DownloadNotepad++,Notepad++,Notepad下载,最新官方正式版Notepad++,remplacantdeNotepad++,Notepad2,netpad,opensource,webeditor,htmleditor,xmleditor,phpeditor,aspeditor,javascripteditor,javaeditor,c++editor,c#editor

    2022年4月27日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号