----------------------
ASP.Net+Unity开发、
.Net培训、期待与您交流! ----------------------
//心脏(XinZang)在身体(Body)内部,所以将XinZang定义成Body的内部类。如果想要访问XinZang我们就要在人Body内进行封装,并对外提供访问的接口show()方法。show()方法内部必须建立一个XinZang的对象,才能对外提供访问。
内部类
为什么需要内部类?
当描述事物时,事物的内部还有事物,该事物用内部类来描述。因为内部事物在使用外部事物的内容。
代码说明:
class Body
{
private class XinZang
{
}
public void show()
{
new XinZang();
}
}
//心脏(XinZang)在身体(Body)内部,所以将XinZang定义成Body的内部类。如果想要访问XinZang我们就要在人Body内进行封装,并对外提供访问的接口show()方法。show()方法内部必须建立一个XinZang的对象,才能对外提供访问。
内部类定义在局部时:
class Outer
{
int x = 3;
void method()
{
final int y = 4; //内部类定义在局部时,只能访问被final修饰的局部变
class Inner //不可以被成员修饰符修饰
{
void function()
{
System.out.println(y);
}
}
new Inner().function();//执行function()方法
}
}
class InnerClassDemo
{
public static void main(String[] args)
{
new Outer().method();
}
}
//执行结果4
匿名内部类:
1.匿名内部类其实就是内部类的简写格式。
2.定义匿名内部类的前提:
内部类必须继承一个类或者实现接口。
3.匿名内部类的格式:new 父类或借口(){定义子类的内容}
代码体现形式:
class Abs{
public void function
{
new AbsDemo()
{
void show()
{
System.out.println("x==="+x);
}
}.show();//匿名内部类的定义格式
}
}
abstract class AbsDemo{
int x = 1;
abstract void show();
}
AbsDemo d = new AbsDemo()
{
void show() {
System.out.println("x==="+x);
}
void abc()
{
System.out.println("haha");
}
};
d.show();
//d.abc(); 编译是失败的
此处参考多态中的知识点:在多态中父类中没有的方法,不能通过父类的引用实现子类中特有的方法。
总结:其实匿名内部类就是一个匿名子类对象。
匿名内部类中定义的方法最好不要超过三个,因为匿名内部类的存在就是为了简化代码。
分析下面语句:
Test.function().method();
Test.function():Test类中有一个静态的方法function.
.method():function这个方法运算后的结果是一个对象,而且是一个Inner类型的对象。
因为只有Inner类型的对象,才可以调用method方法
大致的代码
class Test
{
static Inter function()
{
return new Inter(){
public void method(){
System.out.println("method run");
}
};
}
}
class Inter
{
void method(){
}
}
然后就能够实现Test.function().method();