从零开始学java(二十二)--Java的封装,实现与使用细节JavaBean
java的封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
- 高内聚:封装细节,便于修改内部代码,提高可维护性。
- 低耦合:简化外部调用,便于调用者使用,便于扩展和协作。
- 提高代码的安全性(外部不能轻易调用内部)与复用性(代码复用就可以理解为类的复用,即使用现有的类去构建自己需要的新的类)
封装的实现——使用访问控制符
Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。
- private 表示私有,只有自己类能访问
- default表示没有修饰符修饰,只有同一个包的类能访问
- protected表示可以被同一个包的类以及其他包中的子类访问
- public表示可以被该项目的所有包中的所有类访问
无封装的代码示例:
无封装的代码容易出现问题。
package Chapter_5;
/**
* 无封装
* @author 与猫子
*
*/
public class TestFengZhuang {
public static void main(String[] args) {
Person p = new Person();
p.name = "小红";
p.age = -45;//年龄可以通过这种方式随意赋值,没有任何限制
System.out.println(p);
}
}
class Person {
String name;
int age;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
public访问修饰符测试
1.在本类中访问public修饰的变量或方法
package Public_Test;
/**
* 测试public——本类中访问public修饰的变量与方法
* @author 与猫子
*
*/
public class TestPublic_Person {
//
public String name;
public int age ;
@Override
public String toString() {
return "Person[name = " + name + ",age="+age +"]";
}
}
2.在 本包 中访问public属性或方法
package Public_Test;
/**
* 测试public——本包中访问public修饰的变量与方法
* @author 与猫子
*
*/
public class TestPublic_Animal {
public void introduce() {
TestPublic_Person p = new TestPublic_Person();
System.out.println("Person[name = " + p.name + ",age="+p.age +"]");
}
}
3.在不同包的子类中访问public属性或方法
package Public_Test;
import Chapter_5.Human;
/**
* 测试public——不同包的子类中访问public属性或方法
* @author Administrator
*
*/
public class TestPublic_DifferentPackage_son extends Human{
public void introduce() {
System.out.println("Person[name = " + name + ",age="+age +"]");
}
}
4.在不同包的非子类中访问public属性或 方法
package Public_Test;
import Chapter_5.Human;
public class TestPublic_DifferentPackage_Noson {
/**
* 测试public——不同包的非子类中访问public属性或方法
* @author Administrator
*
*/
public void introduce() {
Human human = new Human();
System.out.println("Person[name = " + human.name + ",age="+human.age +"]");
}
}
protected访问修饰符权限测试
1.在不同包的非子类中测试protected修饰符
package Pretected_Test;
import Chapter_5.Human;
/**
* 测试protected修饰符,不同包中的非子类
* @author Administrator
*/
public class Protected_samePack_noSon {
public void introduce() {
Human human = new Human();
System.out.println("Person[name = " + human.name + ",age="+human.age +"]");//出现报错,human.name不可视
}
}
default访问修饰符测试
可以看见在工作台目录上,两个之前测试public的位于Chapter_5包外的两个类出现报错。证明默认修饰符只有统一个包中的类可以调用。
测试private访问修饰符
看工作台目录,其他所有类都出现了报错。private修饰的只有在本类中才能被调用。
封装的使用细节JavaBean
什么是JavaBean
JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:
- 这个Java类必须具有一个无参的构造函数
- 属性必须私有化。
- 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
- JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。(注意:boolean变量的get方法是is开头!)
- 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。
简单的JavaBean代码示例
package gacl.javabean.study;
/**
* @author gacl
* Person类就是一个最简单的JavaBean
*/
public class Person {
//------------------Person类封装的私有属性---------------------------------------
// 姓名 String类型
private String name;
// 性别 String类型
private String sex;
// 年龄 int类型
private int age;
//是否已婚 boolean类型
private boolean married;
//---------------------------------------------------------
//------------------Person类的无参数构造方法---------------------------------------
/**
* 无参数构造方法
*/
public Person() {
}
//---------------------------------------------------------
//------------------Person类对外提供的用于访问私有属性的public方法-------------------------------------
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
}
//---------------------------------------------------------
}