Java内部类
来源:互联网 发布:80w八实万是网络传销吗 编辑:程序博客网 时间:2024/05/18 03:22
一.内部类
内部类的注意:
1.为什么非静态的内部类中不能出现静态的成员
静态变量是要占用内存的,在编译时只要是定义为静态变量了,系统就会自动分配内存给他,而内部类是在宿主类编译完编译的,也就是说,必须有宿主类存在后才能有内部类,这也就和编译时就为静态变量分配内存产生了冲突,因为系统执行:运行宿主类->静态变量内存分配->内部类,而此时内部类的静态变量先于内部类生成,这显然是不可能的,所以不能定义静态变量!
2.内部类可以使用static修饰,相当于是外部类的一个静态成员类,并且也可以实例化,不需要new使用外部对象就可以直接使用静态内部类,运行时加载时耗费的资源和时长都比较多,静态类在运行前加载,所以在性能上会有提升。
二.匿名内部类
在这里我们看到使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。当然这个引用是隐式的。
使用方式1)
interface
Person {
public
void
eat();
}
public
class
Demo {
public
static
void
main(String[] args) {
Person p =
new
Person() {//这样可以使用多次函数,相当于多态
public
void
eat() {
System.out.println(
"eat something"
);
}
};
p.eat();
}
}
使用方式2)
interface
Person {
public
void
eat();
}
public
class
Demo {
public
static
void
main(String[] args) {
new
Person() {
public
void
eat() {
System.out.println(
"eat something"
);
}
}.eat();//这样只能使用一个函数
}
}
注意事项:1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
2、匿名内部类中是不能定义构造函数的。
3、匿名内部类中不能存在任何的静态成员变量和静态方法。
4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
6、匿名内部类使用的形参必须是final的,如果不是编译器会直接报错
7、匿名内部类没有构造函数,一般使用局部代码块进行构造chushh
阅读全文
0 0
- 【Java】【内部类】Java 内部类简介
- [Java] Java 内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- java的内部类、匿名内部类、局部内部类
- java内部类之成员内部类、静态内部类
- java 成员内部类 局部内部类,匿名内部类
- Java 静态内部类/内部类
- java内部类、静态内部类 小结
- Java内部类,静态内部类
- JAVA 内部类与静态内部类
- java内部类--局部内部类
- Java 内部类以及匿名内部类
- 寄存器修改错误提示1
- 遍历一个文件夹的所有儿子孙子
- 父进程等待子进程的异步版
- JavaScript基础知识(二)
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- Java内部类
- Linux-信号(二)pending
- node学习之别人的例子
- Canvas之画多色圆环动画
- hdu1288
- Kotlin语法基础,运算符
- leetcode565. Array Nesting
- lua linux下环境安装
- CCleaner v5.31.0.6105