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中的封装是针对某个类而言的 ...
随机推荐
- Django框架11 /form组件、modelForm组件
Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...
- 【Nginx】如何封禁IP和IP段?看完这篇我会了!!
写在前面 Nginx不仅仅只是一款反向代理和负载均衡服务器,它还能提供很多强大的功能,例如:限流.缓存.黑白名单和灰度发布等等.在之前的文章中,我们已经介绍了Nginx提供的这些功能.小伙伴们可以到[ ...
- P3406 海底高铁 (洛谷)
题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...
- node name配置错误,导致grid日志在报警
[root@aipdb ContentsXML]# cat inventory.xml <?xml version="1.0" standalone="yes&qu ...
- [spring cloud] -- 服务注册与服务发现篇
eureka 服务发现客户端 DiscoveryClinet职责(核心) 注册服务无试了到Eureka Server中; 发送新塘更新与Eureka Server的租约: 在服务关闭时从Eureka ...
- 带你快速了解 MongoDB 分布式集群
在分布式应用系统中,mongodb 已经成为 NoSQL 经典数据库.要想很好的使用 mongodb,仅仅知道如何使用它是不够的.只有对其架构原理等有了充分认识,才能在实际运用中使其更好地服务于应用, ...
- Spring bean初始化
- 记一次抓包和破解App接口
目录 第一章 · 起源 第二章 · 尝试 第三章 · 脱狱 第四章 · 柳暗花明 第五章 · 终结 第一章 · 起源 某日,想做个爬虫工具,爬某个网站上的数据已做实验之用.大家都知道爬pc网页上的数据 ...
- 完成的设备扫描项目的几个关键程序,包括activity之间的转换
module 的 gradle.build最后三行的compile 是关键dependencies { implementation fileTree(dir: 'libs', include: [' ...
- List<Activity> lists的关闭finish()
public class App extends Application { private static List<Activity> lists = new ArrayList< ...