博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第2章 面向对象特性之封装
阅读量:6179 次
发布时间:2019-06-21

本文共 2633 字,大约阅读时间需要 8 分钟。

1.1 封装与私有关键字

1.1.1 private关键字
A:private关键字:
a:是一个权限修饰符。
b:可以修饰成员(成员变量和成员方法)
c:被private修饰的成员只在本类中才能访问。

1.1.1.1 案例代码八:

package com.itheima_05;/* * 学生类 * * 通过对象直接访问成员变量,会存在数据安全问题 * 这个时候,我们就想能不能不让外界的对象直接访问成员变量呢? * 能。 * 如何实现呢? * private关键字 * * private: * 是一个修饰符 * 可以修饰成员变量,也可以修饰成员方法 * 被private修饰的成员只能在本类中被访问 * * 针对private修饰的成员变量,我们会相应的提供getXxx()和setXxx()用于获取和设置成员变量的值,方法用public修饰 */public class Student {String name;//int age;private int age;public void setAge(int a) {if(a<0 || a>200) {System.out.println("你给的年龄有误");}else {age = a;}}public int getAge() {return age;}public void show() {System.out.println("姓名是:"+name+",年龄是:"+age);}}
package com.itheima_05;[/align]/* * 学生类的测试类 */public class StudentDemo {public static void main(String[] args) {//创建学生对象Student s = new Student();s.show();s.name = "林青霞";//s.age = 28;//s.age = -28;//s.setAge(-28);s.setAge(28);s.show();}}

1.1.2 private最常见应用

A:把成员变量用private修饰
B:提供对应的getXxx()/setXxx()方法
1.1.2.1 案例代码九:

package com.itheima_06;/* * 学生类 */public class Student {private String name;private int age;public void setName(String n) {name = n;}public String getName() {return name;}public void setAge(int a) {age = a;}public int getAge() {return age;}}package com.itheima_06;/* * 学生类的测试类 */public class StudentDemo {public static void main(String[] args) {//创建对象Student s = new Student();System.out.println(s.getName()+"---"+s.getAge());s.setName("林青霞");s.setAge(28);System.out.println(s.getName()+"---"+s.getAge());}}

1.1.3 封装的概述和好处:

A:封装概述
是面向对象三大特征之一
是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。就像刚才说的年龄。
B:封装原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
成员变量private,提供对应的getXxx()/setXxx()方法
C:好处:
通过方法来控制成员变量的操作,提高了代码的安全性
把代码用方法进行封装,提高了代码的复用性

1.2 this关键字

1.2.1 this关键字由来和使用:
A:this:代表所在类的对象引用
方法被哪个对象调用,this就代表那个对象
B:什么时候使用this呢
局部变量和成员变量重名

1.2.1.1 案例代码十:

package com.itheima_07;/* * 学生类 * * 起名字我们要求做到见名知意。 * 而我们现在的代码中的n和a就没有做到见名知意,所以我要改进。 * * 如果有局部变量名和成员变量名相同,在局部使用的时候,采用的是就近的原则。 * * 我们有没有办法把局部变量的name赋值给成员变量的name呢? * 有。 * * 什么办法呢? * 用this关键字就可以解决这个问题 * * this:代表所在类的对象引用 * 方法被哪个对象调用,this就代表那个对象 * * 使用场景: * 局部变量隐藏成员变量 */public class Student {private String name;private int age;public void setName(String name) { //"林青霞"//name = name;this.name = name;}public String getName() {return name;}public void setAge(int age) {//age = age;this.age = age;}public int getAge() {return age;}}
package com.itheima_07;/* * 学生类的测试类 */public class StudentDemo {public static void main(String[] args) {//创建对象Student s = new Student();System.out.println(s.getName()+"---"+s.getAge());s.setName("林青霞");s.setAge(28);System.out.println(s.getName()+"---"+s.getAge());}}

转载于:https://blog.51cto.com/13517854/2086764

你可能感兴趣的文章
我是菜鸟我加油……mysql主从同步
查看>>
[体系结构]设计模式(五)
查看>>
分布式文件系统
查看>>
其实很简单 微星为你详解Z77主板BIOS设置
查看>>
在Ubuntu Kylin下安装JDK1.8
查看>>
Hadoop 学习一
查看>>
Linux中生成/etc/shadow的加密密码
查看>>
《gcc五分钟系列》第三节:-o选项
查看>>
批量检测主机存活状态
查看>>
解决 error: gnu/stubs-32.h: No such file or directory
查看>>
imread 函数 的相关细节
查看>>
分布式和事务
查看>>
C#学习常用类(1002)---KeyValuePair<TKey, TValue> 结构
查看>>
浅谈grep命令查找匹配内容的使用、参数、正则
查看>>
磁盘配额
查看>>
UserInputControls用户输入控制
查看>>
我的友情链接
查看>>
Nginx+Lua架构开发目录贴
查看>>
mysql备份方法(热备)
查看>>
scala匿名函数
查看>>