Java基础—封装
封装是面向对象的核心特征之一,它提供了一种信息隐藏技术。类的包装包含两层含义:一是将数据和对数据的操作组合起来构成类,类是一个不可分割的独立单位;二是类中既要提供与外部联系的接口,又要尽可能隐藏类的实现细节。封装性为软件提供了一种模块化的设计机制,设计者提供标准化的类模块,使用者根据实际需求选择所需的类模块,通过组装模块实现大型软件系统。各模块之间通过接口衔接和协同工作。
类的设计者和使用者考虑问题的角度不同,设计者需要考虑如何定义类中的成员变量和方法,如何实际其访问权限问题。类的使用者只需要知道有哪些类可以选择,每个类有哪些功能,每个类中有哪些可以访问的成员变量和成员方法等,而不需要考虑了解其实现的细节。
1.类成员的访问权限
按照类的封装性原则,类的设计者既要提供类与外部的联系方式,又要尽可能隐藏类的实现细节,具体办法就是为类的成员变量和成员方法设置合理的访问权限。
Java为类设置了两种访问权限,为类的成员变量和成员方法设置了四种访问权限。它们是public(公有),protected(保护),默认和private(私有)。
①、public:被public修饰的成员变量和成员方法可以在所有类中访问。所谓在某类中访问某成员变量,是指在该类的方法中给该成员变量赋值和取值。所谓在某类中访问成员方法,是指在该类的方法中调用该成员方法。所以在所有类的方法中,可以使用被public修饰的成员变量和成员方法。
②、protected:被protected修饰的成员变量和成员方法可以在声明它的类中访问,可以在该类的子类中访问,也可以在与该类位于同一个包中的类访问,但不能在位于其他包的非子类中访问。
③、默认:默认指不使用(即省略)权限修饰符。不使用权限修饰符修饰的成员变量和成员方法可以在声明它的类中访问,也可以在与该类位于同一个包中的类访问,但不能在位于其他包中的类访问。
④、private:private修饰的成员变量和成员方法只能在声明它们的类中访问,而不能在其他类(包括子类)中访问。
2.四种权限修饰符的对比如下表所示:
| 内容 | public | protected | 默认 | private |
| 同类访问 | √ | √ | √ | √ |
| 同包其他类访问 | √ | √ | √ | × |
| 同包子类访问 | √ | √ | √ | × |
| 不同包子类访问 | √ | √ | × | × |
| 不同包非子类访问 | √ | × | × | × |
3、getter/setter访问器
在Java中,通常会将属性私有化,然后提供一对public的getter和setter方法对私有属性进行访问。getter方法和setter方法称为属性访问器。例如:
package jackWe;
public class Student {
//类的属性定义
private String name;
private int age;
private String favourite;
//构造函数
public Student() {
}
//属性访问器
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFavourite() {
return favourite;
}
public void setFavourite(String favourite) {
this.favourite = favourite;
}
public void introduce(){
System.out.println("大家好,我是"+this.name+",我今年"+this.age+"岁,我的爱好是"+this.favourite);
}
protected void study(){
System.out.println("我正在学习");
}
void dowork(){
System.out.println("正在做作业");
}
}
package jackWeTest;
import jackWe.Student;
public class StudentTest {
/**
* 让student访问公有的getter和setter访问器为name、age、favourite属性赋值
* @param args
*/
public static void main(String[] args) {
Student student = new Student();
student.setName("JackWe");
student.setAge(18);
student.setFavourite("篮球");
student.introduce();
}
}
从上例可以看出,Student类与StudentTest类是不同包非子类,在StudentTest类中通过创建Student类的对象student通过公有的setter方法给私有的属性赋值。并且student对象无法调用protected修饰的study方法和默认的dowork方法。
4、类的访问权限
声明一个类只能使用public和省略权限访问修饰符两种。不能使用protected和private。虽然一个Java源文件可以定义多个类,但只能有一个类能够使用public修饰符,该类的类名与类文件的文件名必须相同。例如:
package jackWeTest;
public class StudentTest {
/**
* 在StudentTest类中创建Student静态类的student对象
* @param args
*/
public static void main(String[] args) {
Student student = new Student();
student.setName("JackWe");
student.setAge(18);
student.setFavourite("篮球");
student.introduce();
}
static class Student{
//类的属性定义
private String name;
private int age;
private String favourite;
//构造函数
public Student() {
}
//属性访问器
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getFavourite() {
return favourite;
}
public void setFavourite(String favourite) {
this.favourite = favourite;
}
public void introduce(){
System.out.println("大家好,我是"+this.name+",我今年"+this.age+"岁,我的爱好是"+this.favourite);
}
protected void study(){
System.out.println("我正在学习");
}
void dowork(){
System.out.println("正在做作业");
}
}
}
如上例,StudentTest类为public修饰,Student类为默认的,并且为静态类。
Java基础—封装的更多相关文章
- Java基础-封装和继承
@ 目录 Java基础知识(封装和继承) 一. 封装 1.1 封装的目的 1.2 封装的好处 1.3 封装的步骤 1.4 封装的例子 1.5 小结 二. 继承 2.1 继承的介绍 2.2 生活中的继承 ...
- Java基础——封装
最近学习Java面向对象方面的知识点,一直没时间更新博客,因为这块的知识点真的蛮绕的.一个知识点一个知识点的往外冒,而且对于我这个初学者来说区分构造器和方法就花费了一整天的时间.现在准备再重新过一遍知 ...
- java基础--封装
封 装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处:将变化隔离:便于使用:提高重用性:安全性. 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共 ...
- Java基础-封装(09)
通过对象直接访问成员变量,会存在数据安全问题(比如年龄不能为负).这个时候,我们就不能让外界的对象直接访问成员变量. private关键字 是一个权限修饰符.可以修饰成员(成员变量和成员方法)被pri ...
- JAVA基础第二章-java三大特性:封装、继承、多态
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- Java10-java语法基础(九)——java的封装性
Java10-java语法基础(九)——java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- Java基础系列1:Java基本类型与封装类型
Java基础系列1:Java基本类型与封装类型 当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型. 本篇聊Java数据类型主要包括两 ...
- Java基础之封装
封装(Encapsulation)是java面向对象的三大特性,之前学java迷迷糊糊,一直也没弄清楚什么是封装以及为什么要封装,直到这次看书才有一种被点醒的感觉. java中的封装是针对某个类而言的 ...
随机推荐
- bzoj3767A+B Problem加强版
bzoj3767A+B Problem加强版 题意: 求两个数的和,每个数绝对值≤10^(10^7). 题解: 又用Python水过了…… 代码: a=raw_input() b=a.split() ...
- system.out.println从什么方向执行
从左向右执行,当“+”号前后有字符串出现时,就当做字符串连接符号处理了.
- 图解:如何实现最小生成树(Prim算法与Kruskal算法)
这是图算法的第四篇文章 图解:如何实现最小生成树 文章目录: 1.概念和性质 2.思路探索 3.Kruskal算法 4.Prim算法 5.代码实现 1.概念和性质 今天我们考虑的模型是加权无向图,问题 ...
- abp vnext 开发快速入门 3 实现权限控制
上篇讲了abp vnext 实现了简单的增加操作的例子.删除更新查询基本类似,这里就不讲了,接下来说下如何实现角色权限控制. 再说之前,先说下如果想更加透彻的理解abp vnext的权限控制,最好是先 ...
- Python新手学习raise用法
当程序出现错误时,系统会自动引发异常.除此之外,Python也允许程序自行引发异常,自行引发异常使用 raise 语句来完成. 很多时候,系统是否要引发异常,可能需要根据应用的业务需求来决定,如果程序 ...
- 虚拟化-SDDC软件定义数据中心
一.什么是SDDC? SDDC依赖于虚拟化和云计算技术, SDDC的目标是虚拟化数据中心的一切物理资源,通过虚拟化的技术,构建一个由虚拟资源组成的资源池,不仅是对服务器进行虚拟化,还包括存储虚拟化和网 ...
- O、Θ、Ω、o、ω,别再傻傻分不清了!
前言 本篇文章收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥,一个每天爬二十六层楼还不忘读源码的硬核男人. 前面几节,我们一起学习了算法的复杂度如 ...
- spring oauth2+JWT后端自动刷新access_token
这段时间在学习搭建基于spring boot的spring oauth2 和jwt整合. 说实话挺折腾的.使用jwt做用户鉴权,难点在于token的刷新和注销. 当然注销的难度更大,网上的一些方案也没 ...
- 使用java实现希表的基础功能
用java代码完成哈希表数据结构的简单实现, 以公司雇员的添加修改作为模拟实例 具体代码如下: package com.seizedays.hashtable; import java.util.Sc ...
- 网络通信协议、UDP通信、TCP通信
网络通信协议 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议,它是一个包括TCP协议和IP协议,UDP协议和其它一些协议的协议组. IP地址和端口号 目前,IP地址广泛使用的版本是IPv4, ...