面向对象特性之封装

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象特性之封装相关的知识,希望对你有一定的参考价值。

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

以上是关于面向对象特性之封装的主要内容,如果未能解决你的问题,请参考以下文章

19.Python面向对象之:三大特性:继承,封装,多态。

面向对象之:三大特性:继承(已讲),封装,多态

面向对象特性之封装

面向对象之三大特性

Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

第十篇:面向对象系列之三大特性