你知道为什么要封装吗?

国际案例进来先点赞

说封装,咱们先说说生活中封装,比如你想买一个手机用,你只在淘宝下单就可以了,这个手机怎么生产的,里边的代码怎么写的,你不需要了解,这就是封装,也就是厂家直接把手机给你封装好,你掏钱用就可以了。其实封装性的思想,可以理解为社会分工!

1、封装性的概念

封装性是面向对象的三大特征之一
封账就是隐藏实现细节,仅对外提供访问的接口。内部的具体实现细节我不关心。就和老板布置了一个任务一样,你如何苦逼的我不管,我只要结果!
封装有:属性的封装,类的封装,组件的封装,模块化封装,系统级封装

2、封装的好处

  • 可以模块化,就是分工比较明确嘛,那个模块是干什么的很清楚
  • 信息隐藏
  • 代码重用 封装好了,再次调用的时候,直接去调用就行了,就不用写很多的重复代码了!
  • 插件化易于调试
  • 具有安全性 对于调用者来说是安全的,出问题了不是调用者的错,是自己的错!
    封装的缺点:会影响代码的执行效率,我们是为了提高程序的可维护性,才来牺牲一点效率的还是很值得的。
/**
封装性
如果属性没有封装,那么在本类之外,可以直接随意访问本类属性,这是不安全的

*/
import java.util.Arrays;
public class Test8{
	public static void main(String[] args){	
	Person p1=Person();
	p1.name="菲菲";
	p1.age=18;
	}	
}
//没有封装之前
class Person{
	//在类中定义属性(特征)
	String name;
	int age;
}

这样编译和运行时完全没有问题的,我们封装一下,封装之后的代码

/**
封装性
如果属性没有封装,那么在本类之外,可以直接随意访问本类属性,这是不安全的
private 关键字 私有的 public 共有的 私有的属性和方法只能在本类中使用,共有的属性和方法,可以直接在别的类直接访问
*/
import java.util.Arrays;
public class Test8{
	public static void main(String[] args){	
	Person p1=Person();
	p1.name="菲菲";
	p1.age=18;
	}	
}
//没有封装之前
class Person{
	//在类中定义属性(特征)
	private String name;
	private int age;
}

对你们看到的没有错,在属性前面加上private就可以了,然后我们再编译一下上边这一篇代码


看到没,这样 就不能访问了吧,但是我又不得访问你的属性怎么办,这不矛盾吗?我门在生活中也有这样的例子,既有限制的措施,又有放的措施!比如你是外地的车牌,是不能进京的,那为什么北京又有很多外地牌子的车呢?那你得办进京证!办了进京证就可以在北京开你的小汽车了!那么我们 在代码中怎么办进京证呢?
想要在类外部访问私有属性,我们需要提供公有的访问来间接访问

/**
封装性
如果属性没有封装,那么在本类之外,可以直接随意访问本类属性,这是不安全的
private 关键字 私有的
*/
import java.util.Arrays;
public class Test8{
	public static void main(String[] args){	
	Person p1=Person();
	//p1.name="菲菲";
	//p1.age=18;
	p1.setName("菲菲");
	p1.setAge(18);
	}	
}
//没有封装之前
class Person{
	//在类中定义属性(特征)
	private String name;
	private int age;
	//进京证 getter and setter 规范getset方法 都这样写
	public void setName(String name){
		this.name=name;//不带this的name 就近原则 他是方法参数的name
		//this 代表当前对象
	}
		//对外提供获取name属性的方法
	public String getName(){
		return name;
	}
	//同样的道理 我们写age的进京证
	
	public void setAge(int age){
		this.age=age;
	
	}
		//对外提供获取name属性的方法
	public int getAge(){
		return age;
	}
}

有的童鞋就会问了,封装前和封装后的效果不是一样吗?都是set属性啊,有什么区别呢?
我们这样写结果是一样的,但是意义是不一样的,没封装之前的意义就是我偷了你100块钱,封装之后的意义就是我找你借100块钱,这两种意义一样吗?借你钱得经过你同意的,我偷是可以不经过你同意的,如果没有封装之前,我想赋什么值就赋什么值,你没有反抗的权利,p1.name=“shabi”;那你就变成shabi了啊,这tm谁顶得住,我设置年龄,如果设置成负数了怎么办,如果我用set设置呢?再举个例子,是不是所有的车都可以办进京证呢?如果是黑车呢?
我们在代码中就可以这样做!

//没有封装之前
class Person{
	//在类中定义属性(特征)
	private String name;
	private int age;
	//进京证 getter and setter 规范getset方法 都这样写
	public void setName(String name){
	    if("shabi".equals(name)){
			return;
		}
		this.name=name;//不带this的name 就近原则 他是方法参数的name
	
	}
		//对外提供获取name属性的方法
	public String getName(){
		return name;
	}
	//同样的道理 我们写age的进京证
	public void setAge(int age){
        if(age>150||age<0){
			return;
		}
		this.age=age;
	}
		//对外提供获取name属性的方法
	public int getAge(){
		return age;
	}
}

通常在一个类中,属性都私有化,并对外提供getter and setter 方法,这就是属性的封装!

3、成员变量和局部变量

  • 在类中的位置不同
    成员变量:在类中定义
    局部变量:在方法中定义或者方法的参数
  • 在内存中的位置不同
    成员变量:在堆内存(成员变量属于对象,对象进堆内存)
    局部变量:在栈内存(局部变量属于方法,方法进栈内存)
  • 生命周期不同
    成员变量:随着对象的创建而存在,随着对象的销毁而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值不同
    成员变量:有默认初始化值,引用类型默认为null,这个大家试一试就知道了
    局部变量:没有默认初始化值,必须定义,赋值,然后才能使用
注意:  
	局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

代码实例:

public class Test8{
	public static void main(String[] args){	
	Person p1=Person();
	//p1.name="菲菲";
	//p1.age=18;
	p1.setName("菲菲");
	p1.setAge(18);
	p1.run();
	}	
}
//没有封装之前
class Person{
	//在类中定义属性(特征)
	private String name;//成员变量 ,在类中定义
	private int age;//;//成员变量 ,在类中定义
	public  void run(int leng){//参数也是局部变量
		int m=length;//m 也是局部变量
	}
}

关注爱码士,关注更多精彩内容

在这里插入图片描述

加入群聊一起学习,一起讨论技术!

在这里插入图片描述

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python有以下优点: 1) 语法简单:Python的语法非常简洁清晰,易于学习和使用。 2) 开源:Python是开源的,这意味着程序员可以使用开源的Python代码和解释器进行开发。 3) 免费:Python是免费的,任何人都可以免费使用它进行开发。 4) 高级语言:Python是一种高级语言,它屏蔽了很多底层细节,使得开发过程更加简单和高效。 5) 解释型语言:Python是一种解释型语言,可以跨平台运行,不需要编译,节省开发时间。 6) 面向对象:Python是一种面向对象的编程语言,具有良好的封装性、继承性和多态性。 7) 强大的功能和模块:Python拥有丰富的第三方库和模块,提供了各种强大的功能,使得开发更加便捷。 8) 可扩展性强:Python可以通过调用C、C++等底层语言编写的扩展库,实现对性能和功能的进一步扩展。\[1\] 此外,Python还具有开发效率高的特点。Python拥有丰富的类库,使得开发者可以更快速地实现功能。相比于其他编译语言,Python的代码量较少,开发效率提高了数倍。这也是为何Python在各大互联网公司使用广泛的原因之一。\[3\]但是,Python的运行速度相对较慢,部分原因是因为在源代码运行时需要进行翻译和处理,另一方面Python屏蔽了很多底层细节,导致在执行过程中需要额外的资源,例如内存管理。\[2\] #### 引用[.reference_title] - *1* [Python的优点和缺点](https://blog.csdn.net/m0_62617719/article/details/122168865?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168932982016800211516993%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168932982016800211516993&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-7-122168865-null-null.article_score_rank&utm_term=%E4%BD%A0%E7%9F%A5%E9%81%93python%E6%9C%89%E4%BB%80%E4%B9%88%E4%BC%98%E7%82%B9%E5%90%97)[target="_blank"] [.reference_item] - *2* [Python的优点和缺点](https://blog.csdn.net/m0_62617719/article/details/122168865?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168932982016800211516993%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168932982016800211516993&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-7-122168865-null-null.article_score_rank&utm_term=%E4%BD%A0%E7%9F%A5%E9%81%93python%E6%9C%89%E4%BB%80%E4%B9%88%E4%BC%98%E7%82%B9%E5%90%97)[target="_blank"] [.reference_item] - *3* [学习Python语言,需要先了解一下Python有什么优缺点?](https://blog.csdn.net/duozhishidai/article/details/89679936?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168932982016800211516993%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168932982016800211516993&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-89679936-null-null.article_score_rank&utm_term=%E4%BD%A0%E7%9F%A5%E9%81%93python%E6%9C%89%E4%BB%80%E4%B9%88%E4%BC%98%E7%82%B9%E5%90%97)[target="_blank"] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值