学习android学习必备的java基础知识--四大内部类
学习android必备的java基础知识--四大内部类
今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就总结了一下关于四大内部类的知识。
备注: java语言中允许类中再次定义类,这种在其它类内部定义的类叫内部类,内部类分为四种:常规内部类(成员内部类),局部内部类(方法内部类),匿名内部类,静态嵌套内部类
一、常规内部类
其实常规的内部类就是第一种(成员内部类) 当然 成员内部类由于高内聚,不对外开放原则,比较少用到
/*
* 定义类
*
*/
public class BigDog {
//BigDog 的成员方法
public void GiveChild(){
System.out.println("母狗生孩子!");
}
//定义成员变量内部类 成员内部类
public class SmallDog{
//成员内部类的方法
public void SamllSuck(){
System.out.println("吃奶!");
}
}
}
如何调用成员内部类,在这里定义的内部类,可以实例化创建,但是又因为是类,引用一个类的前提需要new 对象才能通过点方法的调用
/*
* 定义类
*
*/
public class BigDog {
//BigDog 的成员方法
public void GiveChild(){
System.out.println("母狗生孩子!");
}
//定义成员变量内部类 成员内部类
public class SmallDog{
//成员内部类的方法
public void SamllSuck(){
System.out.println("吃奶!");
}
}
//测试
public static void main(String[] args) {
SmallDog sd = new BigDog().new SmallDog() ;
sd.SamllSuck();
}
}
编译一下,我们看到目录中出现了两个class文件,其中有一个文件名叫做BigDog$SmallDog.class,带了一个$符号,这个特点让我们很容易的认出来这是内部类编译后的class文件。
我们来对内部类做一个总结:
- 内部类就像一个实例成员一样存在于外部类中。
- 内部类可以访问外部类的所有成员就想访问自己的成员一样没有限制。
- 内部类中的this指的是内部类的实例对象本身,如果要用外部类的实例对象就可以用类名.this的方式获得。
- 内部类对象中不能有静态成员,原因很简单,内部类的实例对象是外部类实例对象的一个成员。
内部类创建的方法:
- 在外部类的内部,可以用可以用SmallDog sd = new SmallDog() ; 方法直接创建;
- 在外部类外部,必须先创建外部类实例,然后再创建内部类实例。
二、局部内部类
局部内部类又称之为方法内部类,顾名思义,就是类中的方法定义类:
/*
* 定义一个类
*/
public class Out { //定义一个成员变量
private String outName; //定义一个方法
public void outFunction(){
//定义方法变量
int i = 2 ;
//定义方法内部类(局部内部类)
class Inner{
int j = 3 ;
//局部内部类的方法
void print(){
int x = 4 ;
System.out.println("此处是局部内部类的方法体内容!");
}
} //调用Inner 局部内部类
Inner inner = new Inner();
inner.print();
}
//测试
public static void main(String[] args) {
Out out = new Out(); //创建对象
out.outFunction(); //调用方法
}
}
最终执行的代码:

我们来对局部内部类进行总结吧:
- 局部内部类的地位和方法内的局部变量的位置类似,因此不能修饰局部变量的修饰符也不能修饰局部内部类,譬如public、private、protected、static、transient等
- 局部内部类只能在声明的方法内是可见的,因此定义局部内部类之后,想用的话就要在方法内直接实例化,记住这里顺序不能反了,一定是要先声明后使用,否则编译器会说找不到。
- 局部内部类不能访问定义它的方法内的局部变量,除非这个变量被定义为final 。
三、匿名内部类
当我们把内部类的定义和声明写到一起时,就不用给这个类起个类名而是直接使用了,这种形式的内部类根本就没有类名,因此我们叫它匿名内部类,同时,在安卓开发中,是使用比较多的,也是最重要的一种内部类
第一: 首选定义一个家长的接口类:Patriarch
/*
* 定义一个家长的接口类
*
*/
public interface Patriarch {
//定义接口方法
public void JiaoXiaoHai();
}
第二: 定义一个抽象的教师类 并实现一个教师另外的一个身份家长的接口类
/*
*
* 定义一个抽象的教师类 并实现一个教师另外的一个身份 家长 的接口
*
*/
public abstract class Teacher implements Patriarch{
//定义方法
public void doWork(){
System.out.println("在工作!");
}
}
第三:定义一个具体的教师类 “何教师” 具体化实现类
/*
* 具体的教师类 何教师 具体化实现
*/
public class HeTeacher extends Teacher{ @Override
public void JiaoXiaoHai() {
System.out.println("教两个小孩子!");
}
}
最后定义一个测试类:
/*
* 定义一个Test类 进行测试
*/
public class Test { //定义一个main 方法
public static void main(String[] args) {
//何老师
HeTeacher heteacher = new HeTeacher();
heteacher.doWork();
heteacher.JiaoXiaoHai();
/*
* 每次需要具体化实现教师 都必须要进行创建一个对象,也就是说要写一个具体类,这就显得比较复杂麻烦
*/
System.out.println("===============分割线===================");
/*
* 采用匿名局部内的来创建对象
*/
//创建Teacher
Teacher Xuteacher = new Teacher(){
@Override
public void JiaoXiaoHai() {
System.out.println("许老师在教一群孩子!");
}
};
Xuteacher.doWork();
Xuteacher.JiaoXiaoHai();
}
}
由上路的代码可见,其实匿名内部类中,需要具体化对象的实现的话,进行直接匿名创建对象,这样就显得比较方便,不至于每次的要使用不同的具体类都得new 文件 写好,直接采用匿名方式,进行实现便可。
四、静态嵌套类
/*
* 定义一个 类
*/
public class Out { //定义静态变量
static int x = 1 ; //定义静态内部类
static class OutClass{
//定义静态内部类的方法
void print(){
System.out.println("此方法是Out类的静态内部类");
}
} //main 方法测试
public static void main(String[] args) {
Out.OutClass out = new Out.OutClass();
out.print();
}
}
静态嵌套内部类和其他静态方法一样只能访问其它静态的成员,而不能访问实例成员。因此静态嵌套类和外部类(封装类)之间的联系就很少了,他们之间可能也就是命名空间上的一些关联。
各位小伙伴,我来一个温习提示下:内部类在Android中应用的非常多,理解和多多使用很重要,希望我的理解加上大家的努力相信可以一直往前的,加油,同时,如果分享中的内容有错,或者小伙伴有何更好的见解,那就多多联系我吧,毕竟我是初学者嘛,再此致敬。
学习android学习必备的java基础知识--四大内部类的更多相关文章
- 主题:学习Spring必学的Java基础知识(9)----HTTP报文
转: 引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些 ...
- 学习Spring必学的Java基础知识(2)----动态代理
Spring AOP使用动态代理技术在运行期织入增强的代码,为了揭示Spring AOP底层的工作机理,有必要对涉及到的Java知识进行学习.Spring AOP使用了两种代理机制:一种是基于JDK的 ...
- 学习Spring必学的Java基础知识(1)----反射(转)
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
- 学习Spring必学的Java基础知识(1)----反射
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...
- 学习Spring必学的Java基础知识
[1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...
- Android学习笔记(四) JAVA基础知识回顾
一.接口 1)接口中定义的方法都是public权限,并且默认为public,而不是default. 2)接口的实现(implements)是特殊的继承,类似于父类子类的关系,可以向上转型(非常重要). ...
- 反射-----学习Spring必学的Java基础知识之一
Java允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数.属性 ...
- Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识
JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...
- [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识
[源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...
随机推荐
- iOS-金额小写转大写
一.目的 1. 金额小写转化成大写. 如 123456.65 --> 壹拾贰万叁仟肆佰伍拾陆元陆角伍分 2. 只能处理13位数的金额,并且只能处理到小数点后两位. 二.代码 #import &q ...
- 对于大于8046 bytes的行,RCSI/SI事务隔离级别无效
自SQL Server 2005起,我们有了READ COMMITTED SNAPSHOT ISOLATION level (RCSI) 和SNAPSHOT ISOLATION level (SI)两 ...
- 【推荐】oc解析HTML数据的类库(爬取网页数据)
TFhpple是一个用于解析html数据的第三方库,本人感觉功能还算可以,只不过在使用前必须配置项目. 配置 1.导入libxml2.tbd 2.设置编译路径 使用 这里使用一个例子来说明 http: ...
- mysql中如何把字符串转换成日期类型
select date_format('2013-03-09','%Y-%m-%d'); select date_format('2013-03-09','%y-%m-%d'); select STR ...
- C#方法的重载和方法的可变参数
方法的重载 1.方法重载的前提:方法名称必须一样 2.构成重载的条件:参数不一样(参数数量不一样,参数类型不一样) 方法的可变参数 1.可变参数的值的数量可以是0到多个. 2.可变参数调用的时候,没有 ...
- Microsoft Visual Studio 2012 文档 下载地址 vs2012 中文帮助文档
https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=34794 下载地址: http://download.microsoft. ...
- AEAI DP开发平台升级说明
本次发版的AEAI DP_v3.5.0版本为AEAI DP _v3.4.0版本的升级版本,该产品现已开源并上传至开源社区http://www.oschina.net/p/aeaidp. 1 升级说明 ...
- 批处理安装Windows服务,提示"InstallUtil.exe"不是内部命令也不是外部命令解决方式
今天在测试一个C#写的windows服务的时候,在用bat进行调用cmd安装的时候, cd C:\Windows\Microsoft.NET\Framework\v2.0.50727 InstallU ...
- PHP+MySql例子
对于熟悉做网站的人来说,要想网站做成动态的,肯定要有数据库的支持,利用特定的脚本连接到数据库,从数据库中提取资料.向数据库中添加资料.删除资料等.这里我通过一个实例来说明如何用php连接到数据库的. ...
- 重新想象 Windows 8 Store Apps (41) - 打印
[源码下载] 重新想象 Windows 8 Store Apps (41) - 打印 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 打印 示例1.需要打印的文档Pr ...