一 、内部类
内部类共分为四种:静态内部类,成员内部类,局部内部类,以及匿名内部类。
1、静态内部类:只能访问外部类的静态成员变量或者静态方法,生成静态内部类的方法如下:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
2 、成员内部类:既可以访问外部类的静态成员变量或方法,也可以访问非静态成员变量或方法。生成成员内部类的方法如下:
OuterClass.InnerClass inner = ( new OuterClass() ). new InnerClass();
若想在成员内部类中访问外部类的成员变量,语法为OuterClass.this.a.
3、局部内部类:定义在方法当中,可以访问外部类的静态与非静态的方法与成员变量,但是只能访问方法中声明为final的成员变量。
4、匿名内部类:匿名内部类会隐式的继承一个父类或者实现一个接口。
二、 分别给出对应的Demo
1、静态内部类
/**
* 静态内部类
*
*/
class StaticInner
{
private static int a = 4;
//静态内部类
public static class Inner
{
public void method()
{
System.out.println(a);
}
}
}
public class StaticInnerClassTest
{
public static void main(String[] args)
{
//新建一个静态内部类的对象
StaticInner.Inner inner = new StaticInner.Inner();
inner.method();
}
}
2、成员内部类
/**
*成员内部类
*
*/
class MemberInner
{
private String str = "hello";
//成员内部类
public class Inner
{
private String str = "hhhhh";
public void method()
{
//访问外部类的成员变量
System.out.println(MemberInner.this.str);
}
}
}
public class MemberInnerClass
{
public static void main(String[] args)
{
//新建一个成员内部类的对象
MemberInner.Inner inner = (new MemberInner()).new Inner();
inner.method();
}
}
3、局部内部类
/**
* 局部内部类
*
*/
class LocalInner
{
public static void name()
{
}
public void method()
{
final String str = "hhh";
//局部内部类
class Inner
{
public void output()
{
System.out.println(str);
}
}
//生成局部内部类的对象,并调用其方法
(new Inner()).output();;
}
}
public class LocalInnerClass
{
public static void main(String[] args)
{
LocalInner localInner = new LocalInner();
localInner.method();
}
}
4、匿名内部类
public class AnonumousInnerClass
{
@SuppressWarnings("deprecation")
public String getDate(Date date)
{
return date.toLocaleString();
}
@SuppressWarnings("serial")
public static void main(String[] args)
{
AnonumousInnerClass test = new AnonumousInnerClass();
String str = test.getDate(new Date()
//匿名内部类会隐式的继承一个父类或者一个接口,此处的匿名内部类继承了Date类,
//并重写了toLocaleString()方法
{
@Override
public String toLocaleString()
{
return "hello world";
}
});
System.out.println(str);
}
}
网友评论