从零开始学java(二十二)--Java的封装,实现与使用细节JavaBean

java的封装

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  1. 高内聚:封装细节,便于修改内部代码,提高可维护性。
  2. 低耦合:简化外部调用,便于调用者使用,便于扩展和协作。
  3. 提高代码的安全性(外部不能轻易调用内部)与复用性(代码复用就可以理解为类的复用,即使用现有的类去构建自己需要的新的类)

封装的实现——使用访问控制符

Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。
在这里插入图片描述

  1. private 表示私有,只有自己类能访问
  2. default表示没有修饰符修饰,只有同一个包的类能访问
  3. protected表示可以被同一个包的类以及其他包中的子类访问
  4. 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;
     }
     //---------------------------------------------------------
}
©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页