Java—封装
- 封装
- 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法类实现对隐藏信息的操作和访问。
- 封装的实现步骤:修改属性的可见性(设为private)=>创建setter和getter方法(用于属性的读写)=>在setter和getter方法中加入属性控制语句(对属性值的合法性进行判断)
- Java中的包
- 包的作用:管理Java文件;解决同名文件冲突
- 定义包:package 包名,注意:必须放在Java源程序的第一行;包名间可以使用“.”号隔开,如:com.test.Myclass
- 系统中的包:java.(功能).(类)
- 包的使用:可以通过import关键字,在某个文件使用其他文件中的类。如import com.test.Myclass;
- java中,包的命名规范是全小写字母拼写。
- 使用包的时候,不但可以加载某个包下的所有文件,如:com.test.*;也可以加载某个具体子包下的所有文件,如:com.test.music.*
注:默认情况下,java会将同一个包内的类自动导入
以下定义了两个同名Telephone的类:
package com.test;
public class Telephone {
    private double screen;
    public double getScreen() {
        return screen;
    }
    public void setScreen(double newScreen) {
        screen = newScreen;
    }
    public Telephone(){
        System.out.println("com.test.Telephone无参数的构造方法");
    }
}
package com.test.second;
public class Telephone {
    public Telephone() {
        System.out.println("com.test.secont.Telephone");
    }
}
Demo.java
package com.test;
import com.test.Telephone; public class Demo { public static void main(String[] args) {
Telephone phone = new Telephone();
} }
运行结果:
com.test.Telephone无参数的构造方法
package com.test;
import com.test.second.Telephone; public class Demo { public static void main(String[] args) {
Telephone phone = new Telephone();
} }
运行结果:
com.test.secont.Telephone
- 访问修饰符
- 可以修饰属性和方法的访问范围
| 访问修饰符 | 本类 | 同包 | 子类 | 其他 | 
| private | √ | |||
| 默认 | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ | 
- this关键字
this代表当前对象,this.属性 操作当前对象的属性;this.方法 调用当前对象的方法
- 内部类
内部类,是定义在另一个类里面的类,与之对应,包含内部类的类被称为外部类。
内部类的作用:
- 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
- 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
- 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
- 内部类分为:成员内部类、静态内部类、方法内部类、匿名内部类
- 成员内部类
  
- Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等
- Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响
- 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );
- 编译上面的程序后,会发现产生了两个 .class 文件,Outer$Inner.class和Outer.class,第二个是外部类的 .class 文件,第一个是内部类的 .class 文件,即成员内部类的 .class 文件总是这样:外部类名$内部类名.class
注意:
- 外部类是不能直接使用内部类的成员和方法
- 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字
  
- 静态内部类
  
- 静态成员类不能直接访问外部类的非静态成员,可以通过new 外部类().成员来访问
- 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
- 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();
- 方法内部类
方法内部类是内部类定义在外部类的方法中。方法内部类只在该方法的内部可见。
注意:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static修饰符。
package com.test;
public class Demo12 {
    public void show() {
        final int a = 12;
        int b = 13;
        class MInner {
            int c= 2;
            public void print() {
                System.out.println("外部类方法中的变量a=" + a);
                System.out.println("外部类方法中的变量b=" + b);
                System.out.println("内部类中的变量c=" + c);
            }
        }
        MInner mi = new MInner();
        mi.print();
    }
    public static void main(String[] args) {
        Demo12 demo = new Demo12();
        demo.show();
    }
}
运行结果:
  外部类方法中的变量a=12
  外部类方法中的变量b=13
  内部类中的变量c=2
Java—封装的更多相关文章
- 【原创】中文分词系统 ICTCLAS2015 的JAVA封装和多线程执行(附代码)
		本文针对的问题是 ICTCLAS2015 的多线程分词,为了实现多线程做了简单的JAVA封装.如果有需要可以自行进一步封装其它接口. 首先ICTCLAS2015的传送门(http://ictclas. ... 
- java封装的方法
		java封装是由Java是面向对象程序设计语言的性质决定的,面向对象程序设计语言的三大特性之一就是封装.封装其实就是包装的意思,从专业的角度来看,就是把对象的所有组成部分组合在一起,保护私有属性. 如 ... 
- Java - 24 Java 封装
		Java 封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外 ... 
- Echarts 的 Java 封装类库 转自 https://my.oschina.net/flags/blog/316920
		转自: https://my.oschina.net/flags/blog/316920 Echarts 的 Java 封装类库:http://www.oschina.net/p/echarts-ja ... 
- Java-Runoob-面向对象:Java 封装
		ylbtech-Java-Runoob-面向对象:Java 封装 1.返回顶部 1. Java 封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细 ... 
- java封装的优点
		在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机 ... 
- 乐字节Java|封装JavaBean、继承与权限修饰
		本文继续讲Java封装.上一篇:乐字节Java|GC垃圾回收机制.package和import语句 这次讲述JavaBean.继承与权限修饰 一. 封装javaBean 封装(Encapsulatio ... 
- Java 封装 继承 多态
		Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法 ... 
- Java“封装”的例子
		/*功能:Java"封装"的典型例子*/ public class Demo3_5{ public static void main(String args[]){ ... 
- # 095 01 Android 零基础入门  02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门  02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结
		095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ... 
随机推荐
- [CEOI2008]order BZOJ1391 网络流
			题目描述 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成. 现在给出这些参数,求最大利润 输入输出格式 输入格式 ... 
- sublime中设置view_in_browser
			使用package control 管理的view-in-browser插件,用户可以在浏览器中打开任意当前sublime Text中tab所处的文件,例如html.js等. 1.Ctrl+Shift ... 
- TestNG+ExtentReports生成超漂亮的测试报告(转)
			一个优雅.漂亮的测试报告,能够给我们的测试工作带来不少的加分,而报告的模版实在是让我们这些技术人员头疼的问题,设计的实在是没有什么美感. 那么今天就给大家分享一个自动化测试中,一个超漂亮的测试报告模版 ... 
- python统计字符串中字符个数
			str = "xxx" result = {} for i in set(str):#set将字符串转为集合对象,用于去重,减少计算量 result[i] = str.count( ... 
- Applese 涂颜色(欧拉降幂)
			链接:https://ac.nowcoder.com/acm/contest/330/E 来源:牛客网 题目描述 精通程序设计的 Applese 叕写了一个游戏. 在这个游戏中,有一个 n 行 m 列 ... 
- drozer与adb工具的安装与使用
			drozer:链接: https://pan.baidu.com/s/1skTJdgh 密码: wah1 adb:链接: https://pan.baidu.com/s/1gfpIkuv 密码: n8 ... 
- Python 基础学习之字典
			1.基础代码 ##第六章 字典学习 test={'} print(test['a']) print(test['b']) 返回结果为: black123 2.基础知识: Python中的字典是一系列键 ... 
- git命令行操作:拉不到最新代码???
			现场场景: 仓库中有一个包名使用了驼峰命名,还有一个非驼峰的同名包, windows系统下因为不区分文件夹大小写,拉取没问题,但是本地push不上去.打算到Linux上clone下来后,删除那个驼 ... 
- 读书笔记 - 《黑旗 ISIS的崛起》
			不愧是普利策奖的书籍,读起来让人欲罢不能,花了大约四个晚上把此书一气读完.这本书讲述的是“伊斯兰国”ISIS及其前身组织历史,也就是阿布·穆萨卡·扎卡维及其追随者的故事.虽然不是小说,但故事的精彩以及 ... 
- Problem06 求最大公约数及最小公倍数
			题目:输入两个正整数m和n,求其最大公约数(m,n)和最小公倍数[m,n]. 程序分析:利用辗转相除法. 利用辗除法:用较大数除以较小数,再用出现的余数(第一余数)去除除数, 再用出现的余数(第二余数 ... 
