Java初学(七)
一、内部类
1、内部类概述:把类定义在其他类内部,这个类被称为内部类(内部类可以使用static修饰,外部类不可)
2、内部类访问特点:内部类可以直接访问外部类成员,包括私有的
外部类要访问内部类的成员,必须创建对象
3、内部类位置:
成员位置:在成员位置定义的类,被称为成员内部类
局部位置:在局部位置定义的类,被称为局部内部类
4、成员位置内部类案例
内部类和外部类没有继承关系
通过外部类限定this对象
5、局部位置内部类
可以直接访问外部类成员
在局部位置可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
局部内部类访问局部变量必须用final修饰,原因:局部变量是随着方法的调用而调用,随着方法使用完毕而消失,而堆内存的内容不会立即消失(要等垃圾回收器空闲时才回收垃圾变量)。局部变量加final修饰后变为常量,经反编译可看到,局部内部类访问的变量直接是常量而非变量
6、匿名内部类(内部类的简化写法)
前提:存在一个类或者接口(这里的类可以是具体类也可以是抽象类)
格式: new 类名或者接口名(){
重写方法;
}
本质:是一个继承了该类或实现了该接口的子类匿名对象
案例:
interface Inter {
public abstract void show();
public abstract void show2();
}
class Outer {
public void method() {
Inter i = new Inter() { //多态
public void show() {
System.out.println("show");
} public void show2() {
System.out.println("show2");
}
}; i.show();
i.show2();
}
}
class InnerClassDemo6 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
7、
匿名内部类面试题:
按照要求,补齐代码
interface Inter { void show(); }
class Outer { //补齐代码 }
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
要求在控制台输出”HelloWorld”
interface Inter {
void show(); //public abstract void show();
}
class Outer {
//补齐代码
public static Inter method() {
//子类对象 -- 子类匿名对象
return new Inter() {
public void show() {
System.out.println("HelloWorld");
}
};
}
}
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
/*
1:Outer.method()可以看出method()应该是Outer中的一个静态方法。
2:Outer.method().show()可以看出method()方法的返回值是一个对象。
又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。
*/
}
}
匿名内部类面试题
最新文章
- photoshop, 钢笔上色
- java获取客服端信息(系统,浏览器等)
- 浅析 - iOS应用程序的生命周期
- HTML(Open Method)翻译自MSDN
- 第 5 章 工厂方法模式【Factory Method Pattern】
- TransactionScrope 2
- error C2248: “CObject::operator =”: 不可访问 private 员(于“CObject”类声明)
- [2017/5/28]FJ四校联考
- 使用SCP命令在多个linux系统间进行copy拷贝,上传,下载...
- luogu P5288 [HNOI2019]多边形
- vuex状态管理
- MVC 获取控制器名称和Action名称(转载)
- Flask web开发之路三
- redis开机自动服务脚本
- Flash:彻底理解crossdomain.xml、跨swf调用。
- java连接数据库时的报错
- innotop监控mysql
- POI 导出excel带小数点的数字格式显示不对解决方法
- ks8基础(1) etcd安装
- HIVE sql取中文