继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java小试牛刀——内部类

那时候坚持不懈的我
关注TA
已关注
手记 2
粉丝 8
获赞 38

内部类的重要知识
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

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP