关于java的面向对象的编程特性中的封装机制,面向对象 封装
00-1010什么是封装?封装的好处意味着getter方法和setter方法toString方法面向对象的包自定义包
00-1010封装是数据和操作数据的方法的有机结合。函数抽象类的一个接口封装隐藏了细节,这样我们只需要调用对外开放的公共接口就可以实现与对象的交互。我们可以把封装理解为一个保护屏障,需要一些严格的接口来控制。我们可以修改自己的代码来实现类的内部结构,但是不能修改那些公共接口。这提供了更好的安全性。
00-1010好的封装可以降低耦合度,更精确的控制成员变量,封装隐藏细节,更安全。您可以修改类的内部代码,而无需修改那些公共接口。说到封装,就必须说到private这个关键词,也就是访问修饰符。
回想一下我们见过哪些访问修饰符?有public,成员变量不加任何东西的默认权限在英文里是default,还有private我们今天会解释,下一篇文章会解释protected。
私了有什么用?
让我们回忆一下上一篇文章中提到的类和对象。接下来,我将创建一个学生类。
//创建一个学生类class Student { public String name)//学生名public int age//学生时代公共字符串性别;//学生性别公共双分;//学生成绩public void sleep(){ system . out . println(我要睡觉了!);} public void eat(){ system . out . println(我要干饭!);} public void exam(){ system . out . println(我要去考试了! );} } public class test demo { public static void main(String[]args){ Student Student=new Student();//用new关键字实例化一个对象student.age=19Student.name=积累很多钱;student.score=99.9Student.sex= male}}对于上面的代码,我们单独给这个学生成员变量赋值。这样写会有什么缺点吗?
想想看,如果我们每次都要定义一个学生对象,那么每次都这样赋值会不会有点太麻烦?当我们今天谈论封装时,它会使它变得更简单。请看下面的代码:
class Student {私有字符串名称;//学生姓名private int age//学生时代私串性;//学生的性别私双分;//学生成绩publicstringgetname(){ return name;} public void set name(String name){ this . name=name;} } public class test demo { public static void main(String[]args){ Student Student=new Student();Student.setName(随时间累积);system . out . println(student . getname());}}按照封装的概念,我能不能把它封装成一个公共接口,然后调用它。
好了,让我们来分析这段代码:
因此,我们在成员变量前面添加了私有修饰,这样成员变量只能在类内部访问,而不能在类外部访问。然后我们实现setName getName方法,调用者的两个接口可以进行初始化和返回值操作,更好的体现了封装性。
00-1010为了更方便的调用这些接口,IDEA会给我们提供这些接口。我们通常称这些方法为getter方法和setter方法。只要需要,我们可以调用这些常见的getter方法和setter方法。
意见快捷键:Alt插入
:center">
class Student { private String name;//学生姓名 private int age;//学生年龄 private String sex;//学生性别 private double score;//学生分数 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } public void sleep() { System.out.println("我要睡觉了!!!"); } public void eat() { System.out.println("我要干饭了!!!"); } public void exam() { System.out.println("我要考试了!!!"); }}public class TestDemo { public static void main(String[] args) { Student student = new Student();//利用new关键字实例化一个对象 student.setName("厚积薄发"); student.setAge(19); student.setScore(99.9); student.setSex("male"); System.out.println(student.getName()); System.out.println(student.getAge()); System.out.println(student.getScore()); System.out.println(student.getSex()); }}
toString方法
此外,我们每个成员变量都要自己实现一遍打印操作,没错IDEA编译器又为我们提供了一个方法,这个方法叫做toString方法,快捷键是 Alt +insert然后选择toString方法。
我们直接打印对象的引用就可以调用toString方法.
有同学就会问为什么呢?
这就得需要我们看一看println的源码是怎么实现的了。
我们按住ctrl 点进println这个方法
我们通过源码就可以发现,println会调用toString方法,如果定义了toString方法,那他就调用toString方法,如果没有调用他就会打印:
eg:
其中IDEA还为我们提供了构造方法,为了更好地方便初始化,构造方法的文章请看这篇文章:
Java类与对象超基础讲解
快捷键: Alt + insert 选择constructor
总结:
private关键字:利用private修饰的成员变量和方法只能在本类中访问,如果在外部访问可以调用公有的setter方法和getter方法。
封装的优点:减少代码的耦合性 , 可以自由修改自己的内部类,不用修改公有地接口 ,隐藏信息实现细节,更精准的控制成员变量。
要记住并且运用并且调用这些公共的接口:getter方法和setter方法 还有toString方法 以及 构造方法。
面向对象封装之包
包是什么呢?
包其实就是类似于文件夹,为了更好地管理。在java中引入包的概念,包的用处:如果一个包中的类不想被另外一个包中的类使用这就更好地体现了封装性,还有一个作用就是,Java中不可以在src底下创建相同的类名,这一点包就可以解决,只要在不同的包中,类的名称可以一样。
怎么进行导包呢?
还记得我们在学习数组的时候使用过Arrays这个类,我们就要导入java.util包
例如:
当然我们还可以手动导入
这里还需要注意一个问题:
我们可以注意到在包中有java.util包也有java.sql包,当我们同时导入这两个包,计算机就会反应不过来到底导入哪个包
所以,当同时导入util包和sql包时候,我们需要手动导入具体是导入那一个包。
自定义包
一般包的名字都是域名倒着过来 例如 com.hjbf.TestDemo
我们上面文章讲过访问修饰限定符,有一个是默认访问权限(default)其实也叫作包访问权限,如果成员变量前边什么也不加那就是默认访问权限也叫作包访问权限只能够在同一包中使用。
这里我们要注意一下我们创建一个包,他就会导入这个包,其中packge是声明在包中,后面的就是路径。
我们可不可以在这个包里访问其他包呢?
答案是可以的,当我们访问其他包时候,他就会在本包中导入其他的包。
包的基本规则:
在文件的最上方加上一个 package 语句指定该代码在哪个包中.包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 ).包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码.如果一个类没有 package 语句, 则该类被放到一个默认包中.常见的包分类:
1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
2. java.lang.reflect:java 反射编程包;
3. java.net:进行网络编程开发包。
4. java.sql:进行数据库开发的支持包。
5. java.util:是java提供的工具程序包。(集合类等) 非常重要
6. java.io:I/O编程开发包
到此这篇关于Java全面分析面向对象之封装的文章就介绍到这了,更多相关Java封装内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。