内部类:1.成员内部类,可以理解为类中的成员变量;
例1:
public class test {
public static void main(String[] args){
Outlei out=new Outlei();//定义一个外部类的实例对象
Outlei.Inlei lei=out.doil();//外部类调用返回内部类的方法实例化内部类。
lei.drink();
}
}
class Outlei{
private class Inlei{//隐藏内部类
void drink(){
System.out.println("lei在喝水 ");
}
}
Inlei doil(){
retrun new Inlei();
}
}
内部类中要实现外部接口的例:
public class test {
public static void main(String[] args){
Outlei out=new Outlei();//定义一个外部类的实例对象
Jiekou kou=out.doil();//外部类调用返回内部类的方法实例化内部类。
kou.drink();
}
}
interface JieKou{
abstract viod drink(){};//抽象类方法,给内部类重写用的
}
class Outlei{
private class Inlei{
public void drink(){
System.out.println("lei在喝水 ");
}
}
JieKou doil(){
retrun new Inlei();
}
}
在内部类中this.变量,就是调用当前类中的变量;而外部类.this.变量就是调用了外部类中的变量。
2局部内部类,就是外部类中方法下的内部类,可以理解为类中的局部变量;
局部内部类中,如果它外部的方法中有局部参数,那么就是局部参数是要被fianl所修饰,称为常量,如果这个局部内部类要实现一个外部接口,那么就应该把该局部内部类向上向上转型为借口的类,然后再实现接口,例:
interface JieKou{
}
public class Outclass{
public Jiekou doil( final String s){
public class Inclass implements JieKou{
Inclass(String x){
s=x;
System.out.println("s");
}
}
return new Inclass();//返回给JieKou 相当于JieKou kou=new Inclass();向上转型;因为局部内部类调用的是有参构造函数,而接口中不能有构造函数,
//所有用这种类型来把内部类方法制造外部接口出来。
}
}
3.匿名内部类,没有引用对象的
跟匿名对象一样,用到它的情况一是:内部类只使用一次
其格式为
public 接口名 doil(){
return new 内部类名(){
内部类的成员,方法体
}
}
4静态内部类;静态内部类里能有静态成员、方法,但是不能够调用外部类中非静态的
另外 静态内部类在实例化是不需要再其前面在加上外部类对象了进行实例化对象
程序检测时,可以把主方法放入静态内部类中
5.内部类的对象实例化是其一的情况是必须在外部类中的非静态方法中实现,这个方法是不是静态的并且是有返回的,返回一个new 内部类;其二的外部类对象.new.内部类名。
6某个子类继承了父类B,而这个父类B是外部类A的内部类,这是子类继承父类B时 要写一个带形参外部类A 的构造方法,方法体的格式为形参A。super();这个子类就继承了父类B 的构造方法
7内部类中的成员方法和变量只有在内部范围内,外部类不能访问到它,而内部类可以访问外部类中所有可见的成员。