Thinking in Java:内部类
来源:互联网 发布:十宗罪网络剧百度云 编辑:程序博客网 时间:2024/05/01 15:32
内部类
普通内部类:其对象的实例化依赖于一个外部类对象,有指向其外部类对象的引用,可以访问外部类的所有成员变量和方法,普通内部类中不能包含静态成员变量和静态方法。
public class Outer{
private String out = "Outer";
public void out(){
}
class Inner{
public void printOut(){
System.out.println(out);
}
public Outer getOuter(){
return Outer.this;//获取该内部类所指向的外部类
}
public void innerOut(){
out();
}
}
public Inner getInner(){
return new Inner();
}
public static void main(String args[]){
Outer outer = new Outer();
Inner inner1 = outer.getInner();
Inner inner2 = outer.new Inner();
}
}
当外部类中的方法与内部类中的方法重名时,若无特殊指明则访问的是内部类中的方法,例:
public class Outer{
private String out = "Outer";
public void out(){
System.out.println("out");
}
class Inner{
public void out(){
System.out.println("in");
}
public void innerOut(){
out();
}
public void innerOut2(){
Outer.this.out();
}
}
public static void main(String args[]){
Outer outer = new Outer();
Inner inner1 = outer.getInner();
inner1.innerOut();
inner1.innerOut2();
}
}
打印结果:in
out
局部内部类:在方法中的内部类
interface In{
public void writeIn();
}
public class Outer{
private boolean flag = true;
public In getIn(){
if(flag){
class Inner{
public void out(){
System.out.println("in");
}
public void innerOut(){
out();
}
public void innerOut2(){
Outer.this.out();
}
}
return new Inner();
}
return null;
}
}
匿名内部类:匿名内部类若使用外部类的变量,则该变量是final的。
interface In{
public void out(String out);
public void writeIn();
}
public class Outer{
private final String out = "out";
public In getIn(){
return new In(){
public void out(out){
System.out.println(out);
}
public void writeIn(){
System.out.println("匿名内部类");
}
};
}
}
嵌套类(静态内部类):内部类的创建不再依赖于外部类,也就没有了指向外部类的引用,嵌套类中不能访问外部类的非静态成员变量和方法
public class Outer{
private String out = "Outer";
public void out(){
}
static class Inner{
public void printOut(){
System.out.println(out);
}
public void innerOut(){
out();
}
}
public static void main(String args[]){
Outer outer = new Outer();
Inner inner2 = new Inner();
}
}
继承普通内部类的问题:因为普通的内部类中持有指向其外部类的引用,该引用必须被初始化,所以不论是普通内部类还是其子类的实例化都要依赖于外部类的实例。
public class Outer{
private String out = "Outer";
public void out(){
}
class Inner{
public void printOut(){
System.out.println(out);
}
public void innerOut(){
out();
}
}
}
Inn(Outer out){
out.super();//继承内部类所用特殊语法
}
}
内部类的覆盖问题:
public class Outer{
class Inner{
public void printInner(){
System.out.println("Super Inner");
}
}
public static void main(String args[]){
Outer out = new OuterChild();
out.new Inner().printInner();
out.new Inner().printInner();
}
}
class OuterChild extends Outer{
class Inner{
public void printInner(){
System.out.println("Child Inner");
}
}
}
打印信息:Super Inner
父子类中的内部类相互独立,且由此得知具体调用的内部类与外部类的类型有关(而非具体实现),调用与此类型相关联的内部类
内部类的意义:
1、“多重继承”的另一种实现方式,一个类可以包含多个外部类
2、内部类拥有对外部类的访问权限,可以在一些功能的实现上更加简洁
3、内部类与外部类可以实现相同的接口/继承相同的类,这样外部类相当于对接口/父类提供了多种不同的实现方式
- Thinking in Java:内部类
- Thinking in Java 内部类
- Thinking in java 内部类
- Thinking in Java之匿名内部类
- Thinking in java 之:内部类
- Thinking in Java 整理笔记:内部类
- Thinking in java 之 内部类
- thinking in java——内部类
- Thinking in Java:第十章-内部类
- THINKING IN JAVA 读书笔记——内部类
- 第十章:内部类 《Thinking in java》学习笔记
- Thinking in Java 内部类访问外部类
- [Thinking in JAVA] 关于内部类的一些知识点
- Thinking in Java---内部类及一个迭代器实例
- 【Thinking in Java笔记】为什么需要内部类
- thinking in java 多态,接口,内部类,异常小结
- Thinking in java 之:内部类的继承
- Thinking in Java 第10章 内部类
- flume伪分布式部署和测试
- android-如何关闭AlertDialog.Builder对话框
- Head First 设计模式 (十) 状态模式(State pattern) C++实现
- google地图多Marker 多infowindow
- android-隐藏或显示软键盘
- Thinking in Java:内部类
- 计算机怎样启动的。
- flume 伪分布式配置设置方法
- c #问题1
- Android平台上如何让应用程序获得系统权限以及如何使用platform密钥给apk签名
- 前端的几种特殊样式
- iOS tabbarviewControll的简单使用设置
- Flume——安装与配置
- Android不让弹出键盘挡住View