版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39088514/article/details/73264473
内部类浅解
成员内部类
- 作为成员类,与外部类的属性方法并列。
- 成员内部类持有外部类的引用,释放的时候需要先释放内部类对象的任务,否则会造成内存泄漏
一旦编译成功,则会产生两个类
代码如下:
public class Test2 {
private int c=10;
void show(){
System.out.println("Out"+c);
}
class Inner{
int a=10;
void show1(){
System.out.println("INner"+a+c);
}
}
}
- 当我们调用内部类的时候,需要先引用出来外部类。
public static void main(String[] args) {
Test2 t2=new Test2();
t2.show();
Test2.Inner i=t2.new Inner();
Test2.Inner in=new Test2().new Inner();
i.show1();
in.show1();
}-
运行结果如下:
Out------>10 INner0------->1010 INner0------->1010
局部内部类
- 写在方法中的,一般来说,需要返回对象,之后想什么时候调用就什么时候调用
- 局部内部类,访问方法中的变量,变量需要定义成final。
- 局部内部类之后还会使用,如果不定义成final的,变量就会随着方法的结束从栈内存消失、导致局部内部类不能访问局部变量
- 代码如下:
void show(final int c){
class ShowClass{
void reInr(){
System.out.println(c);
}
}
new ShowClass().reInr();
System.out.println("Out------>"+c);
}
Test2 t2=new Test2();
t2.show(50);
运行结果: 50
匿名内部类
- 没有抽象方法的抽象类
- 代码如下:
public abstract class Test4 {
abstract void show();
}
class show{
public static void main(String[] args) {
Test4 t4=new Test4() {
@Override
void show() {
System.out.println("这是匿名内部类实现的方法");
}
};
t4.show();
}
}
静态内部类
- 静态内部类不需要有外部类对象
- 静态内部类不持有外部类对象的引用
静态内部类不能访问外部的非静态成员
代码如下:
public class Test5 {
private int age=10;
static private int as=20;
void show(){
System.out.println("age------->"+age);
System.out.println("as------>"+as);
}
static void Show1(){
System.out.println("as------>"+as);
}
static class StaticMethod{
void Sshow(){
System.out.println("age------->"+age);
System.out.println("as------>"+as);
}
static void SSshow(){
System.out.println("age------->"+age);
System.out.println("as------>"+as);
}
}
}
从代码中我们可以看到,有两处错误,当我们的内部类定义成静态的之后,就只能访问外部类的静态属性。无论内部类的方法是否为静态的。
结束
---------------2017年6月14日23:52:44 syf