3)Java学习笔记:内部类
什么是内部类
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类
为什么要使用内部类
①内部类提供了更好的封装,除了该外围类,同一个包下的其他类都不能访问
②内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体
③内部类可以对同一个包中的其他类隐藏起来,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
④可以实现多继承
⑤当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷
内部类特性
①内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号
②内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量
③外部类不能直接访问内部类的的成员,但可以通过内部类对象来访问
④内部类可以自由地访问外部类的成员变量,无论是否是private的
⑤因为当某个外围类的对象创建内部类的对象时,此内部类会捕获一个隐式引用
实现多重继承
class Eat {
public void eat() {
System.out.println("eat()");
}
}
class Drink {
public void drink() {
System.out.println("drink()");
}
}
public class MutiExtend {
private EatExtra eat = null;
private DrinkExtra drink = null;
MutiExtend() {
eat = new EatExtra();
drink = new DrinkExtra();
}
public void drink() {
drink.drink();
System.out.println("drinkExtra()");
}
public void eat() {
eat.eat();
System.out.println("eatExtra()");
}
private class EatExtra extends Eat {
// inner class can not have static declaration
// static int age;
// allowed,因为在compile阶段就已经确定了
static final int name = 123;
@Override
public void eat() {
super.eat();
}
}
private class DrinkExtra extends Drink {
@Override
public void drink() {
super.drink();
}
}
}
注意事项
①内部类不能定义静态成员变量和方法
②内部类访问外部类实例用: 外部类名.this.变量名
③创建内部类: outerClassInstane.new InnerClass()
局部内部类
①不能范围该方法的非final局部变量
②不可以定义静态变量
静态内部类
①要创建嵌套类的对象,并不需要其外围类的对象
一种比较好的用法
public class AuthModule {
// private static int SUCCESS = 200;
// private static int FAIL = 400;
// 比这种实现要好很多吧,但是只限于是该类的状态,这样可以有命名空间Status
private static class Status {
private static int SUCCESS = 200;
private static int FAIL = 400;
}
public void doSomething() {
System.out.println(Status.SUCCESS);
System.out.println(Status.SUCCESS);
}
}
3)Java学习笔记:内部类的更多相关文章
- Java学习笔记-内部类
内部类在Android中有着大量的运用 内部类 内部类提供了更好的封装:内部类可以直接访问外部类的私有数据:匿名内部类适合那些只需要使用一次的类.非静态内部类不能拥有静态成员.内部类比外部类可以多使用 ...
- Java学习笔记——内部类及其调用方法
一.static内部类的static方法 public class Test0719_Inner_Test { public static void main(String[] args) { //s ...
- Java学习笔记之---内部类
Java学习笔记之---内部类 (一)成员内部类 内部类在外部使用时,无法直接实例化,需要借助外部类信息才能实例化 内部类的访问修饰符可以任意,但是访问范围会受到影响 内部类可以直接访问外部类的成员, ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- java学习笔记9--内部类总结
java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...
随机推荐
- P2P应用中的NAT穿透问题
多年前曾经写过一个关于NAT钻洞的实验.现在发现那个做法在我现在的路由器上已经不管用了.经过一番搜索发现时过境迁,世界变化很快,新路由器已经是UPnP了.在这里重新理一下几种方法. 第一种,也是不太靠 ...
- Html 中表单提交的一些知识总结——防止表单自动提交,以及submit和button提交表单的区别
转自:http://jackaudrey.blog.163.com/blog/static/1314217882010590041833/ 在页面中有多个input type="text&q ...
- css选择器的优先级别
<html><head lang="en"> <meta charset="UTF-8"> <title>< ...
- (转)windows上virtualenv 安装及使用
[注意]要在某个含有空格的目录下面创建virtualenv环境,就要安装 win32api . 原文地址:http://blog.csdn.net/liuchunming033/article/det ...
- POJ 3258 River Hopscotch(二分查找答案)
一个不错的二分,注释在代码里 #include <stdio.h> #include <cstring> #include <algorithm> #include ...
- 阿里笔试js题
有一个数组,其中保存的都是小写英文字符串,现在要把它按照除了第一个字母外的字符的字典顺序(字典顺序就是按首字母从a-z顺序排列,如果首字母相同则按第二个字母……)排序,请编写代码: 例:[" ...
- c#动态生成word,在本地可以执行,但发布到iis上出错解决方案
报错点: Microsoft.Office.Interop.Word.DocumentClass.SaveAs 解决方案: 1.在"开始"->"运行"中输 ...
- Myeclipse添加struts2支持后取消操作
Myeclipse添加struts包后, 想重新加载的方法: 1. myelicpse,右键项目,选close project 2. 找到项目所在目录, 打开.classpath删除带有struts2 ...
- 把中文版NetBeans改成英文版
不管你从官网下的是英文版还是中文版,安装之后操作界面都是中文的.这是因为NetBeans会根据你的操作系统自动设置界面语言,并且没有提供更改的功能.解决的方法也很简单,下面介绍我用过的两种方法: 方法 ...
- Codeforces #377 Div2
打得还不错的一场CF,题目质量也很高,今后还要继续努力 A题: 题意:给定一个数k,让其乘一个最小的数,使乘得以后的数要不被10整除,要不减去r以后被10整除,求这个最小的数 #include < ...