Java 内部类

来源:互联网 发布:s算法的基本特征 编辑:程序博客网 时间:2024/06/10 20:59
  • 内部类的重要知识
    1.不能直接在主方法里调用内部类的方法或者属性
class Outer{
private int a=1;
class Inner{
public void Info(){
System.out.println(a);
}
}
}
class ListSetMap {
public static void main(String[] args) {
new Outer.Inner().Info(); //这样编译不通过的
}
}
会报错
---------- 编译javac ----------
ListSetMap.java:12: 错误: 需要包含Outer.Inner的封闭实例new Outer.Inner().Info(); //这样是错误的写法^1 个错误
 不是静态类,因此不能使用“外部类.内部类”的形式。
所以只能通过调用外部类的来调用内部类的方法
class Outer{
private int a=1;
class Inner{
private int b=0; //定义b
public void Info(){
System.out.println(a);
}
}
public void fun()
new Inner().Info(); //生成Inner对象调用方法
System.out.println(new Inner().b); //继续访问private int b
}
}
class ListSetMap {
public static void main(String[] args) {
new Outer().fun(); //调用外部类的方法调用内部类
}
}
  • 使用static来声明内部类(即可直接调用)-->解决上面的办法
class Outer{
private static int a=1;
static class Inner{
public void Info(){
System.out.println(a);
}
}
}
class ListSetMap {
public static void main(String[] args) {
new Outer.Inner().Info();
}
}
输出    1
  • 在外部访问内部类
对于上面的static方法来访问内部类,那还有下面这种方法来调用内部类的方法或者属性
class Outer{
private int a=1; //封装变量   
class Inner{    
public void Info(){
System.out.println(a);
}
}
}
class ListSetMap {
public static void main(String[] args) {
Outer out=new Outer(); //实例化外部类对象
Outer.Inner in=out.new Inner(); //实例化内部类对象
in.Info(); //调用内部类的方法
}
}
输出   1
  • 还能在方法中定义内部类
class Outer{
private int a=1;
public void fun(){     //此处若有参数 必须使用final定义
class Inner{
public void Info(){
System.out.println(a);
}
}
new Inner().Info();     //实例化内部对象
}
}
class ListSetMap {
public static void main(String[] args) {
new Outer().fun();
}
}

输出   1
0 0