java内部类
概念:a类定义在b类中,a类就是b类的内部类
内部类有,成员内部类、局部内部类、静态内部类、匿名内部类。
成员内部类---内部类作为外部类的成员
public class OuterClass{
String name="外部类---name"
class InterClass{
String name="内部类---name"
void show(String name){
System.out.println("局部变量name"+name);//就近原则,局部变量name
System.out.println("内部类变量name"+this.name);
System.out.println("外部类变量name"+OuterClass.this.name);
}
}
}
内部类对象的创建
OuterClass.InterClass i1=new OuterClass().new InnerClass();
局部变量
内部类定义在外部类的代码块/方法体中
public class OuterClass{
String name="外部类---name"
void show(){
class InterClass{
String name="内部类---name"
void show(String name){
System.out.println("局部变量name"+name);//就近原则,局部变量name
System.out.println("内部类变量name"+this.name);
System.out.println("外部类变量name"+OuterClass.this.name);
}
}
}
}
只能在当前方法中创建局部内部的对象,并且声明与普通类相同
静态内部类
class OuterClass{
static String name="OuterClass--name";
int a;
static class InnerClass{//局部内部类
String name="InnerClass---name";
void hai() {//在静态内部类的方法中不能调用外部类的实例成员
System.out.println("局部变量name="+name);
System.out.println("内部类name="+this.name);
System.out.println("外部类name="+OuterClass.name);
//System.out.println("外部类a="+a);//不能访问外部类的实例成员
}
}
对象的创建与成员内部类相同
匿名内部类
匿名内部类其实是局部内部类的简化写法
static void show2() {
//想使用Haha的hai方法
//匿名内部类来实现
new Haha() {
void hehe() {System.out.println("hehe1");}
}.hai();
}
匿名内部类是一次性类不能被调用
内部类的作用
- 1、内部类可以很好的实现隐藏。
非内部类是不可以使用 private和 protected修饰的,但是内部类却可以,从而达到隐藏的作用。同时也可以将一定逻辑关系的类组织在一起,增强可读性。 - 2、间接的实现多继承。
每个内部类都能独立地继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。所以说内部类间接的实现了多继承。