栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java中的内部类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java中的内部类

一、成员内部类
成员内部类中不能写静态的 变量,方法,但是如果该静态变量被final修饰的时候,是可以的
代码:

class Aoo {
    int x = 3;
    class Boo {
        int x = 4;
        public void f() {
            int x = 5;
            // 要打印Aoo中的x,用以下写法
            System.out.println(Aoo.this.x);
        }
    }
}
class Aoo {
    int x = 3;
    class Boo {
        int x = 4;
        public void f() {
            int x = 5;
            // 要打印Boo中的x,用以下写法
            System.out.println(this.x);
        }
    }
}
class Aoo {
    int x = 3;
    class Boo {
        int x = 4;
        public void f() {
            int x = 5;
            // 要打印f方法中的x,用以下写法
            System.out.println(x);
        }
    }
}
public class TestDemo {
    public static void main(String[] args) {
    // 要实例化内部类,需要先实例化外部类
        Aoo aoo = new Aoo();
        Aoo.Boo boo = aoo.new Boo();
        Aoo.Boo boo1 = new Aoo().new Boo();
        boo.f();
    }
}

二、静态内部类
1、静态内部类只能直接访问外部类中的静态方法,不能直接访问外部类的非静态方法;

class Coo {
    int x = 3;
    static int y = 4;
    static class Doo {
        int a = 5;
        public void f() {
            System.out.println(y);
        }
    }
}

2、如果需要访问外部类中的非静态方法,需要new一个外部类的对象,然后通过 对象.变量访问;

class Coo {
    int x = 3;
    static int y = 4;
    static class Doo {
        int a = 5;
        public void f() {
            System.out.println(new Coo().x);
        }
    }
}

3、静态内部类实例化的时候,不需要先实例化外部类,可以直接通过 new 外部类.内部类() 来创建;

  public static void main(String[] args) {
        Coo.Doo doo = new Coo.Doo();
        doo.f();
    }

三、匿名内部类

public class TestDemo {
    public static void main(String[] args) {
        f();
    }
    public static void f() {
        
        Goo goo = new Goo(){
            @Override
            public void ff() {
                System.out.println("匿名内部类");
            }
        };
        System.out.println(goo.x);
        //这一步是声明的父类,new的子类,调用方法的时候是子类的方法,即ff()方法输出的是 “匿名内部类”
        goo.ff();
        Hoo hoo = new Hoo() {
            @Override
            public void h() {
                // 匿名内部类实现了Hoo接口,声明的是父类,new的是子类,调用的是子类的h(),输出的是 "TestDemo.h"
                System.out.println("TestDemo.h");
            }
        };
        hoo.h();
    }
}

class Goo {
    int x = 4;
    public void ff() {
        System.out.println("Goo.ff");
    }
}

interface Hoo{
    void h();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号