------- android培训、java培训、期待与您交流! ----------
1.根据位置的不同,java的内部类分为四种:
(1)静态内部类
使用static修饰,声明在类体中
静态内部类可以访问类的静态成员
(2)成员内部类
声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能
创建内部类实例
(3)局部内部类
把类声明在方法中,就是局部内部类,作用域
(4)匿名内部类
匿名类 非常常见,可以写在任何地方,就像一般语句
匿名类是对原类的一个继承,同时创建了实例,{}就是继承以后以后的类体
类体中可使用所有类的语法
匿名类不能写构造器
匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现
2.四种内部类的大概讲解
2.1 静态内部类
public class StateInnerClassDemo{
public static void main(String[] args){
Foo.Koo koo=new Foo.Koo();
System.out.println(koo.add());
}
}
class Foo{
int a=1;
static int b=2;
//静态内部类的作用域类似静态变量,类加载以后就存在可以在静态内部类中访问静态成员
static class Koo{
int add(){
return b+1;
}
}
}
2.2 成员内部类
public class InnerClassDemo{
public static void main(String [] args){
//1.在Goo创建之后,才有Moo,否则会出编译错误
//Moo moo=new Moo();//编译错误
//2.创建成员内部类
Goo goo=new Goo();
Moo moo=goo.new Moo();
//必须使用goo实例创建Moo实例
//3.goo创建的Moo实例可以访问goo实例的属性
Goo goo2=new Goo();
goo2.a=2;
Moo moo2=goo2.new Moo();
System.out.println(moo.add()+","+moo.add());
}
}
class Goo{
int a=1;
static int b=2;
//成员内部类:不使用static说明的内部类
//成员内部类与实例变量具有相同的作用域
class Moo{
int add(){
return a+b;
}
}
}
2.3 局部内部类
在方法内临时的创建一些类时,可以使用局部内部类
public class LoadInnerClassDemo{
public static void main(String [] args){
final int a=2;
class Foo{//局部变量
int b=1;
public int add(){
return a+b; //a是final的局部变量
}
}
2.4 匿名内部类
2.4.1 匿名内部类,简称匿名类,比较常见
public class AnnInnerClassDemo{
public static voidmain(String[] main){
Xoo xoo=new Xoo(){//匿名内部类
}
}
class Xoo{
}
2.4.2 匿名内部类演示
public class AnnInnerClassDemo{
public static void main(String [] main){
//匿名内部类new Xoo(){}是对Xoo的继承,并同时实例化
// 也可以说,new Xoo(){}是Xoo子类实例,是一个对象
Xoo xoo=new Xoo(){};
//2."{}",类体中可以声明大部分的功能,比如覆盖tostring的方法
Xoo xoo1=new Xoo(){
@Override
public String toString(){
return "Hi,Iam xoo1";
}
};
System.out.println(xoo) //com.itheima.A$1@dc8569
System.out.println(xoo1); //Hi,Iam xoo1
}
}
class Xoo{}