--------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
内部类是指一一个外部类的内部在定义一个类。内部类作为外部类的一个成员,并且依附于外部类存在的。内部类可为静态,private,和protected。
内部类分为四种:
1.静态内部类
使用static修饰,声明在类体中
静态内部类可以访问外部类中的静态成员
生成一个静态内部类不需要外部类对象
列如:
public class S1 {
public static String s;
public static void SetS(String ma)
{
s=ma;
}
static class Koo//内部类
{
public Koo()
{ SetS("sdad");
System.out.println("....."+s);
}
}
public static void main(String[] args)
{
S1.Koo koo=new Koo();
}
}
2.成员内部类
声明在类体中,不适用static
必须有外部类的实例才能创建内部类实例
内部类实例可以访问外部类的成员变量
例如:
import 内部类.Goo.Moo;
class Goo
{
int a=1;
static int bm=2;
class Moo
{
int add()
{
return a+bm; //外部类中的成员变量都可以在内部类中使用
}
}
}
public class InnerDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Goo goo=new Goo();//创建外部类对象
Moo moo=goo.new Moo();//利用外部类对象创建内部类对象
System.out.print("..."+moo.add()
)
};
3.局部内部类
把类声明在方法中,就是局部内部类
局部内部类不能有访问说明符,可以访问当前代码块内的常量和此外围类所有的成员
例如:
public class LocalInner {
public static void main(String[] args) {
// TODO Auto-generated method stub
final int a=2;
class Foo//局部类部类
{
int b=1;
public int add()
{
return a+b;//调用外围变量
}
}
Foo f=new Foo();
System.out.println(f.add());
}
}
4.匿名内部类
可以卸载任何地方,不能写构造器
可以从抽象类和接口继承,但必须提供抽象的实现
使用时只能创建一个实例,创建时用new
匿名内部类是局部类的一个特例,所以对局部内部类的限制对匿名内部类也有效
列如:
interface Zoo{
int add();
}
abstract class Yoo{
abstract int add();
}
public class AnnInner {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final int a=2;
Yoo yoo=new Yoo(){//从抽象类继承的内部类实例
int add()
{
return a+1;
}
};
Zoo zoo=new Zoo(){//从接口实现的匿名内部类实例
public int add()
{
return a+3;
}
};
System.out.println(zoo.add());
System.out.println(yoo.add());
}
}