Java设计者选择不支持多继承,其主要原因是多继承会让语言本身变得非常复杂,效率也会降低。为了实现多继承大多好处,java中的内部类和接口加在一起,可以实现多继承
内部类
内部类技术主要用于设计具有相互协作关系的类集合。特别是在编写处理GUI事件的代码时,使用它可以让代码看起来更加专业。
可以使某些编码根简洁。隐藏你不想让别人知道的操作。
内部类的优缺点:
◇ 优点:节省编译后产生的字节码文件的大小
◇ 缺点:使程序结构不清楚
内部类分为:嵌套静态类,成员类,本地类,匿名内部类
嵌套静态类:若被声明为static,就变成了顶层类,不能再使用局部变量。若想在Inner Class中声明任何static成员,则该Inner Class必须声明为static。
成员类和本地类之间最重要的差别是,本地类只能访问 final 的变量或者参数。
匿名类允许我们把类的定义和实例的分配组合在一起。我们可以直接用 new SomeClass() 实例化对象,并且在实例化的位置把整个类的实现都放在花括号中。
本地内部类与匿名内部类的区别在于本地内部类有构造函数,而匿名内部类只能实例初始化。
匿名内部类:通常用在Java的事件处理上
package inner;
import java.applet.*;
import java.awt.event.*;
public class AnonymousInnerClassDemo extends Applet{
public void init() {
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent me){
showStatus("Mouse Pressed!");// 这个匿名内部类可以访问外部类的方法showStatus. }
});
}
public void showStatus(String str){
System.out.println(str); }
}
在上面的例子中, 方法addMouseListener接受一个对象型的参数表达式, 于是, 在参数里, 我们定义了一个匿名内部类,这个类是一个MouseAdapter类型的类, 同时在这个类中定义了一个继承的方法mousePressed, 整个类做为一个参数.这个类没有名称, 但是当执行这个表达式时它被自动实例化.