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中的封装是针对某个类而言的 ...
随机推荐
- bzoj1742[Usaco2005 nov]Grazing on the Run 边跑边吃草*&&bzoj3074[Usaco2013 Mar]The Cow Run*
bzoj1742[Usaco2005 nov]Grazing on the Run 边跑边吃草 bzoj3074[Usaco2013 Mar]The Cow Run 题意: 数轴上有n棵草,牛初始在L ...
- Git操作(二)
很久以前写的git入门,最近又巩固了一下Git分支操作,下面是我的一些整理. 1.分支与合并 #创建并切换到该分支 git checkout -b xxx #查看当前分支 git branch #进行 ...
- static关键字真能提高Bean的优先级吗?答:真能
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- mysql groupby 字段合并问题(group_concat)
在我们的日常mysql查询中,我们可能会遇到这样的情况: 对表中的所有记录进行分类,并且我需要得到每个分类中某个字段的全部成员. 上面的话,大家看起来可能不太好懂,下面举一个例子来给大家说明. 现在我 ...
- Cyber Security - Palo Alto Firewall Objects Addresses, Services, and Groups(3)
LDAP Authentication and Remote Users and Groups Create Remote User Objects and LDAP Integration: sam ...
- Python Hacking Tools - Web Scraper
Preparation: Python Libray in the following programming: 1. Requests Document: https://2.python-requ ...
- 牛客练习赛 66B题解
前言 当初思路 开始没想到异或这么多的性质,于是认为对于每个点\(u\),可以和它连边的点\(v\)的点权 \(a_v=a_u \oplus k\)(证明:\(\because\) \(a_u\opl ...
- scratch编程我的世界3D史蒂夫
这个程序我们只能制作出一个3D模型而已,并不是真正的我的世界整个游戏: 效果很炫酷吧!现在我们就来看看是怎样编程的吧! 首先,这个模型是有无数个平面克隆体摞在一起,旋转后会产生一种立体的错觉,是不是有 ...
- 【JVM之内存与垃圾回收篇】程序计数器
程序计数器 介绍 JVM 中的程序计数寄存器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息.CPU 只有把数据装载 ...
- 01 安装Linux虚拟机
平常的工作学习中,Linux成为了一项比不可少的需要的掌握的技能,但是大部分人又不习惯于使用Linux进行生活,所以你需要在你的Windows电脑上安装一个虚拟机,那如何安装呢?其实不难,跟着我一步步 ...