内部类 目的:提高安全性
成员内部类
在外部类的内部定义的一个内部类
public class OutClass {
public static void main(String[] args) {
OutClass.Inner in = new OutClass().new Inner();
}
/**
* 成员内部类
**/
class Inner {
}
}
局部内部类
在方法中定义的内部类
不能使用public和private修饰
对外界完全隐藏(除了所在的方法以外)
**代码示例:**
public class Out {
private static int a;
private int b;
/**
* 非静态方法内使用局部内部类
*/
public void test(final int c) {
final int d = 1;
class Inner {
public void print() {
System.out.println(a);
System.out.println(b);
}
}
}
/**
* 静态方法内使用局部内部类
*/
public static void testStatic(final int c) {
final int d = 1;
class Inner {
public void print() {
System.out.println(a);
//定义在静态方法中的局部类不可以访问外部类的实例变量
//System.out.println(b);
}
}
}
}
静态内部类
**示例代码:**
public class Out {
private static int a;
private int b;
public static class Inner {
public void print() {
System.out.println(a);
}
}
}
匿名内部类
代码示例:
匿名内部类的定义的语法格式 (一种是接口,另一种是抽象类。)
/*
* 对于实现接口,由于接口是没有构造函数的,注意这里一定是空参数。
*/
new 实现接口(){
//匿名内部类类体部分
}
或者
/*
* 调用父类的构造器,注意此处可以是空参数,也可以传入参数。
*/
new 父类构造器(实参列表){
//匿名内部类类体部分
}
使用匿名内部类(这里举例第一种情况:实现借口)
//定义借口
interfance Product {
public double getPrice();
public String getName();
}
public class Anonymous
{
public void test (Product p){
System.out.println(p.getName()+"--------"+p.getPrice());
}
public static void main(String [ ] args ){
Anonymous as= new Anonymous ();
as.test(new Product( )/**此处实现接口并实现抽象方法***/ {
public double getPrice( )/**实现方法**/{
return 8888;
}
public String getName( )/**实现方法**/{
return "I can do it ";
}
});
}
}