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--对 ...
随机推荐
- Oracle Sql优化之日期的处理
1.时,分,秒,年,月,日等日期的常用取值方法 select hiredate, to_number(to_char(hiredate,'hh24')) 时, to_number(to_char(hi ...
- MVC 创建Word文档
/// <summary> /// 创建一个word /// </summary> /// <returns></returns> public Act ...
- 我也谈javascript闭包
1.什么是闭包呢?Whenever you see the function keyword within another function, the inner function has acces ...
- 介绍Angular的注入服务
其实angular的注入服务是挺复杂的,目前看源码也只看懂了一半,为了不误导大家,我也不讲敢讲太复杂,怕自己都理解错了. 首先我们要知道angular的三种注入方式: 第一种:inference va ...
- 用JAVA捕获屏幕、屏幕录像、播放
http://blog.csdn.net/njchenyi/article/details/447554 用JAVA捕获屏幕.屏幕录像.播放 标签: javaexceptionimageimportn ...
- Struts拦截器使用
创建拦截器java程序 package cn.itcast.oa.util; import com.opensymphony.xwork2.ActionInvocation; import com.o ...
- flex中Event类的使用
当您创建自己的自定义 Event 类时,必须覆盖继承的 Event.clone() 方法,以复制自定义类的属性.如果您未设置在事件子类中添加的所有属性,则当侦听器处理重新分派的事件时,这些属性将不会有 ...
- Quick Cocos2dx Http通讯 JSON
参考: 1 http://stackoverflow.com/questions/5975952/how-to-extract-http-message-body-in-basehttprequest ...
- asp.net 输出Excel
private void lbtExportToExcel_Click(object sender, EventArgs e) { string strdate = DateTime.Now.Mont ...
- (中等) HDU 4725 The Shortest Path in Nya Graph,Dijkstra+加点。
Description This is a very easy problem, your task is just calculate el camino mas corto en un grafi ...