JAVA基础--面向对象09
一、适配器设计模式
1.适配器模式
adapter:适配器;
电脑电源适配器;作用:转换电压,将不符合使用要求的220伏特的市电转换成我们电脑可以使用的电压;
适配器:将不符合使用要求的东西转换成符合我们使用要求的东西;
2.生活中的适配
Java中,根据适配的目标不同,可以将适配器分为三类:
对类的适配;对对象的适配;对接口的适配;
对接口的适配:
需求:有一个接口,里面定义了5个抽象函数;而我们要写一个类实现这个接口,但是在我们的类中,只需要使用其中的一个方法;
使用接口的适配:
接口的适配,又叫做接口的实例化;
心得:类似于你先写一个interface 接口 然后在写一个抽象类(这个就是adapter) 实现了这个接口,然后再你要写的类上继承这个抽象类,然后重写我们需要的方法
二、内部类
1. 内部类介绍
a. 内部类引入
一个事物里面,会有另外一个事物,而且二者是相互依赖的;
人,里面有心脏;
原来的做法:
问题:人和心脏是相互独立的两个类,不能体现相互依赖的关系;怎么解决?
这种做法,就是使用的内部类;
b. 内部类的代码体现
一个类可以书写在另外一个类的里面,写在里面的那个类,就是内部类;
包含一个内部类的类,就叫做外部类;
小结:
根据内部类在外部类中的书写位置,可以将内部类分为两类:
成员内部类;局部内部类;
2. 成员内部类
根据修饰符的不同,成员内部类又可以分为一般成员内部类、私有成员内部类和静态成员内部类;
a. 一般成员内部类
a.1 内部类可以直接使用外部类的所有成员;
要创建一个一般成员内部类的对象,必须先有外部类的对象存在;
a.2外部内怎么使用内部类成员
外部类要使用内部类成员,需要先创建内部类对象;然后通过内部类对象来使用;
在一般成员内部类中不能定义静态成员变量和成员函数;(除了常量变量)
结论:在一般成员内部类中,能使用static修饰的成员,只能是final的基本数据类型和字符串类型的数据;
其他引用类型的变量(包括数组)也不行;
a.3外部类以外的类怎么使用内部类成员
在外部类以外的类中需要先创建外部类的对象,然后根据这个对象创建内部类的对象,然后根据内部类的对象来访问内部类的属性和行为;
b. 私有成员内部类
使用private关键字修饰的内部类就是私有成员内部类;
私有成员内部类,只能在他所属的外部类中使用;
c.静态成员内部类
被static关键字修饰的内部类,就是静态成员内部类;
静态的成员内部类,和外部类的对象无关了;
所以静态成员内部类,又被叫做嵌套类;
静态成员内部类,不能直接使用外部类的非静态成员;
要使用外部类的非静态成员,需要先创建外部类的对象,通过外部类的对象来调用;
外部类的静态成员,可以在静态成员内部类中直接使用;
要创建静态内部类的对象,不需要先创建外部类的对象;
结论:在外部类以外使用静态成员内部类,和使用一般类一样,仅仅是在类的名字前要加上外部类的类名;
d.静态成员内部类的一个应用
使用静态成员内部类实现单例设计模式:
3. 局部内部类
局部内部类,是写在函数中的类,可以直接使用外部类的静态成员,和通过外部类的对象使用外部类的非静态成员;
局部内部类,只能在定义它的函数中使用;
别的地方要使用它,只能通过调用这个函数来使用;
要使用所在函数的局部变量,需要将局部变量声明为final的;
(在JDK8中,不需要人为定义成final了,编译器会做相应的优化)
4. 匿名内部类
a. 匿名内部类
内部类也是一个类,可以实现接口和继承其他类;
结论:当内部类实现一个接口或者继承一个类时,如果只需要被使用一次,就可以使用匿名内部类,简化书写;
b. 匿名内部类的面试题分析
三、包
1. 包的引入
所有书写的java源文件和编译好的class文件都放在同一个文件夹下,当项目复杂时,文件会非常多,就不便于管理;
而且,在同一个文件夹里,不能出现相同名称的文件;
思考:在平时,为了方便管理过多的文件,需要创建很多文件夹,根据自己的使用习惯,将不同的文件放到不同的文件夹中;
在java中,也可以这么做;文件夹,在Java中,叫做包;
通过创建不同的包,就可以实现class文件的管理;
2. 包的创建
a. 包的声明方法
java的包,是直接声明在java源文件中的,在文件的最开始;
使用关键字:package声明;
声明格式是:在关键字后面加上包名;
包名的写法:也是一个标识符;所有字母都是小写;
一般会创建多层包,多层包名之间使用 . 分开;
例如:
单层包名: package demo;
多层包名: package demo.test1;
包名有一个命名习惯:
多层包名,前面部分,是公司域名倒置;
传智播客:www.itcast.cn;
域名倒置:cn.itcast.
倒置的域名后面,一般跟的是项目名,再后面跟的是项目中的模块名;
b.带包声明的类的编译和运行
3. 不同包中类的访问方式
结论:
1、要访问其他包中的类和类中的方法,这个类和这个被访问的方法,都要是public的;
2、要访问其他包中的类,要在类名前面加上包名;
如果在类中多次使用其他包中的类,使用包名加类名的方法,很麻烦,有一个简单的办法:导包;
如果需要在一个包中导入多个类,一个一个类导入也很麻烦,简单的办法是:直接在包名后面不写类名,使用*代替:
这样做可以导入com.demo2包中的所有类;(如果这个包里面还有子包,不能导入);
总结:
要使用其他包中的类,可以有两种方式的导入:
a、在用到其他类时,写全名(包名加类名);
弊端是:如果多次使用这个类,每用一次就要写一次,很麻烦;
b、在类前面,包声明后面,使用import关键字导入该类;
4. JAVA 访问权限
Java中的访问权限,总共四种,使用三个关键字修饰:
从小到大排列:
私有的(private):被修饰的成员,只能在本类中使用;
默认的(没有修饰符,就是默认的):只能在本类和同一个包中的不同类之间访问;
受保护的:(protected)和默认的相比,在不同的包中的子类可以访问父类中的受保护的内容;
公共的(public):被修饰的成员,所有地方都可以访问;
java访问权限表:(yes:可以访问;no:不可访问)
private(私有的) |
默认的(什么都不写) |
protected(受保护的) |
public(公共的 ) |
|
同一个类中 |
yes
|
yes |
yes
|
yes |
同一个包中不同类之间 |
no |
yes |
yes |
yes |
不同包中有继承关系的类 |
no |
no |
yes |
yes |
不同包中没有继承关系的类 |
no |
no |
no |
yes |
总结:
私有的,是访问权限最小的,只能在本类中使用;
公共的,访问权限最大,所有地方都可以使用;
protected:受保护的,主要就是给子类使用的;
默认的,只能在同一个包中使用
四、API文档查询
发中,更多的情况使用别人已经写好的东西;
1. API概念
API(Application programming interface):应用程序接口;
别人写好的供大家使用的程序,就是API;而这个帮助我们理解和使用API的文档就叫做API帮助文档;
2.API文档的查询
a. 按包查询
如果事先知道要找的类在那个包下面,就可以使用按包查找的方法:
b. 按索引查询
如果事先已经知道要使用的类的类名,就可以使用按索引查找的方法:
3. 类所在的包
4. 类的继承关系
5. 当前类实现的接口
6.类或者接口的定义格式
7.类或者接口的功能描述
8. 类的构造方法
如果有的类,所有构造函数都是私有的,就不会出现构造方法摘要;
9.类的方法摘要
点击方法摘要,可以进入方法使用详情:
10. 字段摘要
System:
JAVA基础--面向对象09的更多相关文章
- java基础面向对象之类与对象
java基础面向对象之类与对象 2017-01-14 1.面向对象的基本概念 以一种组建化的形式进行代码设计 1)在面向对象程序设计中包含有如下几种特性 •封装性:保护内部结构的安全性 •继承性:在已 ...
- 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点
前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现
075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...
- 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现
074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...
- 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现
073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...
- 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法
072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...
随机推荐
- BUPT复试专题—字符串转换(2013计院)
题目描述 我们将仅由若干个同一小写字母构成的字符串称之为简单串,例如"aaaa"是一个简单串,而"abcd"则不是简单串.现在给你一个仅由小写字母组成的字符串, ...
- [WASM] Access WebAssembly Memory Directly from JavaScript
While JavaScript has a garbage-collected heap, WebAssembly has a linear memory space. Nevertheless u ...
- SolidEdge 如何绘制剖视图
如果要创建剖视图,则点击切割平面按钮,然后绘制剖面线,画好之后点击完成 然后点击剖视图按钮,鼠标单击刚才的剖面线,往要的方向拖动,即可生成剖面视图 剖视图有时也需要用到旋转剖视图 如下图所示, ...
- hdu5289(2015多校1)--Assignment(单调队列)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- 手机号码归属地查询免费api接口代码
依据手机号码查询用户的卡类型.运营商.归属地.区域等信息. 手机归属地实体类 package org.wx.xhelper.model; /** * 手机归属地 * @author wangxw * ...
- 项目Beta冲刺(团队6/7)
项目Beta冲刺(团队6/7) 团队名称: 云打印 作业要求: 项目Beta冲刺(团队) 作业目标: 完成项目Beta版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 陈宇 ...
- 使用JavaScript获取浏览器Chrome版本信息
Navigator对象包含了有关浏览器的信息 可通过访问其属性appVersion或userAgent来获取浏览器Chrome版本 例如,我所使用的QQ浏览器的appVersion和userAgent ...
- POJ 1737 Connected Graph(高精度+DP递推)
题面 \(solution:\) 首先做个推销:带负数的压位高精度(加减乘+读写) 然后:由 \(N\) 个节点组成的无向图的总数为: \(2^{N*(N-1)/2}\) (也就是说这个图总共有 \( ...
- 关于static和const
先谈一下static, 它是一个存储修饰变量.被static修饰的变量存储在静态数据区,只初始化一次,保持数据的持久性.被static修饰的变量和函数有一个共同点是对其他的源文件不可见.被static ...
- asp.net下的cookieName
https://stackoverflow.com/questions/1017144/rename-asp-net-sessionid Add to your web.config:- <sy ...