java 面向对象-封装
Posted boyw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 面向对象-封装相关的知识,希望对你有一定的参考价值。
面向对象三大特性:
封装:为了解决程序数据的安全性
继承:为了解决程序代码的重复性
多态:为了解决程序代码的扩展性
什么是封装:
封装:将类中某些成员隐藏起来,对外暴露一个公共的访问方式
通过下面 一个例子来说明下为什么要使用封装
public class Dog { int age; String name; public void bark(){ System.out.println("狗嗷嗷叫...."); } } public class TestDog { public static void main(String[] args) { //1.创建一个狗对象 Dog d1 = new Dog(); System.out.println(d1.name); // null System.out.println(d1.age); // 0 //2.修改成员变量的值 d1.name = "旺财"; d1.age = -18;//非法数据 System.out.println(d1.name); // 旺财 System.out.println(d1.age); // 18 } }
如果我们给 age 赋值非法数据,也能通过编译,也能运行,但是数据很明显不符合实际,我们可以使用封装,解决这种数据安全问题
原则:合理隐藏,合理暴露
步骤:
- 隐藏成员变量
- 提供一种访问的方式
如何使用封装
private关键字的介绍
private 可以用来修饰类的成员变量/成员方法
作用:
如果成员变量被private修饰了,那么该成员变量只能类的内部访问,外部无法访问
接着:
我们还需要暴露一种访问该成员变量的方式,称为获取器和设置器(getter And setter)
代码演示:
public class Dog { //private的作用 私有化成员变量 private int age; private String name; public void bark(){ System.out.println("狗嗷嗷叫...."); } //为name提供get/set方法 public String getName(){ return name; } public void setName(String n){ name = n; } //我们要为age提供get/set方法 //get方法 public int getAge() { return age; } //set方法 public void setAge(int a){ //对数据的合法性进行判断 if (a>0 && a<20){ age = a; }else{ age = 10;//如果a的值不符合正常范围,我们认为是10 } } } public class TestDog { public static void main(String[] args) { //1.创建一个狗对象 Dog d1 = new Dog(); // System.out.println(d1.name); // null System.out.println(d1.getName()); // null // System.out.println(d1.age); // 0 System.out.println(d1.getAge()); // 0 //2.修改成员变量的值 // d1.name = "旺财"; d1.setName("旺财"); // d1.age = -18;//非法数据 d1.setAge(-1800); System.out.println(d1.getName()); // 旺财 System.out.println(d1.getAge()); // 18 } }
以上是关于java 面向对象-封装的主要内容,如果未能解决你的问题,请参考以下文章