---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
对于java内部类,曾经有一段时间,都不是很清楚,也不是很清楚它的作用。现在理解后,将其变为笔记,记录下来。
使用内部类的好处:每个内部类都能独立地实现接口,所以无论外围类是否已经继承了某个(接口)的实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。也就是说,内部类允许你继承多个非接口类型(类或抽象类)。
如下的内部类:
interface A{}
interface B{}
class X implements A, B{}
class Y implements A{
B makeB{
// Anonymous inner class
return new B(){};
}
}
public class MutiInterfaces{
static void takesA( A a ){}
static void takesB( B b ){}
public static void main( String[] args ){
X x = new X();
Y y = new Y();
takesA(x);
takesA(y);
takesB(x);
takesB( y.makeB() );
}
}
通常遇到问题的时候,问题本身就能给出某些指引,告诉你应该使用单独一个类,或是使用内部类。
如果要继承的是抽象的类或具体的类,而不是接口,那么只能使用内部类才能实现多重继承。
使用内部类,可以获得其他一些特性:
1 内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。
2 在单个外围类中,你可以让多个内部类以不同的方式实现同一个接口,或继承同一个类。
3 创建内部类对象的时刻并不依赖于外围类对象的创建。
匿名内部类:
匿名类的声明是在编译时进行的,实例化在运行时进行。这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。在使用匿名内部类时,有以下几个原则:
匿名内部类不能有构造方法。
匿名内部类不能定义任何静态成员、方法和类。
匿名内部类不能是public,protected,private,static。
只能创建匿名内部类的一个实例。
一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
内部类只能访问外部类的静态变量或静态方法。
---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------