内部类:
就是定义在一个类内部的类,与之对应,包含内部类的类叫做外部类。
使用内部类优点:
1. 内部类提供了更好的封装,可以将内部类隐藏在外部类中,不允许同一个包中的其他类随意访问该类。
2. 内部类的方法可以直接访问外部类的所有数据,包括私有数据
定义:
方法内部类就是定义在外部类的方法中的类,只在该方法内可以调用
注意:
1.由于方法内部类不能在外部类的方法(指的是包含着该内部类的方法)以外的地方使用,所以不能使用 访 问 控 制 符 和 static修饰符
2.方法的返回类型不能是内部类,但可以是内部类的父类,当返回内部类对象的引用时,会进行向上转型
代码:
public class Fangfa_neibu_class {
//外部类中的方法
public void show(){
final int a=25;//常量
int b=2; //变量
//方法内部类
class MInner { //注意不能使用public
int c=13;
public void print(){
System.out.println("访问外部类中的final常量a:"+a);
System.out.println("访问nei部类中的变量c:"+c);
}
}
MInner mi=new MInner();//创建方法内部类的对象
mi.print();//调用内部类的方法
}
public Object makeInner(final int i){
int k=4;
class Inner1{
public String toString(){
//k=5;
return "Inner1 "+(i+k);
}
}
return new Inner1();
}
public static void main(String[] args){
Fangfa_neibu_class cs=new Fangfa_neibu_class();//创建外部类对象
cs.show();//调用外部类方法
Object cc=cs.makeInner(5);
System.out.println(cc.toString());
}
}
运行结果:
访问外部类中的final常量a:25
访问nei部类中的变量c:13
Inner1 9
在makeInner(final int i)方法中,存在方法内部类Inner1,在该方法中尝试返回内部类的对象,但在程序中可以看到 返回的对象为 cc,是Object类型的,正是Inner1 的父类。