面向对象特性之封装

第1章 面向对象特性之封装

1.1  封装私有关键字

1.1.1 private关键字

A:private关键字:

a:是一个权限修饰符。

b:可以修饰成员(成员变量和成员方法)

c:被private修饰的成员只在本类中才能访问。

1.1.1.1 案例代码:

package com.itheima_05;

/*

 * 学生类

 *

 * 通过对象直接访问成员变量,会存在数据安全问题

 * 这个时候,我们就想能不能不让外界的对象直接访问成员变量呢?

扫描二维码关注公众号,回复: 1840354 查看本文章

 * 能。

 * 如何实现呢?

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

/*

 * 学生类的测试类

 */

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;

/*

 * 学生类

 *

 * 起名字我们要求做到见名知意。

 * 而我们现在的代码中的na就没有做到见名知意,所以我要改进。

 *

 * 如果有局部变量名和成员变量名相同,在局部使用的时候,采用的是就近的原则。

 *

 * 我们有没有办法把局部变量的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());

}

}

猜你喜欢

转载自blog.csdn.net/qq_36330733/article/details/80808308