内部类分为4种:
1.成员内部类;
2.静态成员内部类;
3。局部内部类;
4.匿名内部类
成员内部类:它是作为一个外部类的一部分,它是可以调用外部成员,但外部类不能直接调用它::
class Outer{
int x=3;
class Inner{
public void show(){
System.out.println("x"+x);
}
}
}
public class test{
public static void main(String[] args){
Outer.Inner in=newOuter().newInner();
in.show();
}
}
静态内部类:随着类的加载而加载
class Outer{
int x=3;
class Inner{
public void show(){
System.out.println("x"+x);
}
}
}
public class test{
public static void main(String[] args){
Outer.Inner in=Outer.newInner();
in.show();
}
}
局部内部类:因为不同变量的周期不同,调用变量结果也不一样
class Outer{
//final int x=1;
public void methoh(){
int x=3;
class Inner{
int x=4;
public void show(){
System.out.println("x"+x);
}
}
new Inner().show();
}
}
public class test{
public static void main(String[] args){
Outer out=new Outer();
out.methoh();
}
}
内部类的继承: 可以实现在局部内部类中有多个方法被使用时,可以向上转型后通过创建父类对象来统一调用
abstract class Inter{
abstract void show();//抽象类
}
class Outer{
int x=1;
public void methoh(){
int x=3;
class Inner extends Inter{
int x=4;
public void show(){
System.out.println("x"+x);
}
}
//返回个Inner给父类Inter
public Inter getInner(){
return new Inner();
}
//子类Inner向上转型,然后调用子类show()方法
new Inter().show();
}
}
public class test{
public static void main(String[] args){
Outer out=new Outer();
out.methoh();
}
}
匿名内部类: 可以简化一些只被加载一次的类调用的代码
abstract class Inter{
abstract void show();//抽象类
}
class Outer{
int x=1;
public void methoh(){
int x=3;
new Inter(){
public void show(){
System.out.println("x"+x);
}.show();
}
}
}
public class test{
public static void main(String[] args){
Outer out=new Outer();
out.methoh();
}
}