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

java基础【内部类(普通内部类,嵌套类,普通局部内部类,匿名内部类)】

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

java基础【内部类(普通内部类,嵌套类,普通局部内部类,匿名内部类)】

package com.hike.javase.innerclass;



class Outer{
    private int id = 10;

    //普通内部类,隶属于外部类的对象,创建和使用会受到外部类对象的限制。
    public class inner1{
        private int id = 100;

        public void inner1Test(){
            System.out.println(id); //就近原则,100
            System.out.println(inner1.this.id);//内部类的id
            System.out.println(Outer.this.id);//外部类的id

            outerTest2();//在内部类中可以随意使用外部类的成员,因为都是类的成员,这也是内部类与外部类的关系
        }
    }

    public void outerTest1(){
        inner1 inner1 = this.new inner1();
        inner1.inner1Test();
    }

    public void outerTest2(){
        System.out.println("outerTest2()...");
    }

    //嵌套类,与外部类是平级的关系
    static class Inner2{

        public static String name = "Inner2";

        public static void staticTest(){
            System.out.println("inner static test");
        }

        private  int age;

        public Inner2(int age){
            this.age = age;
        }

        public void inner2Test(){
            System.out.println("inner2Test");
        }
    }
}

//匿名内部类通常和接口配合
interface I1{
    void test1();
}


public class InnerClassTest {

    public static void main(String[] args) {
        //匿名内部类:因为没有类名,所以需要在声明的同时创建对象
        I1 i1 = new I1(){   //只能创建一个对象,并且不能本态调用
            //类体部分就相当于接口的实现子类的类体
            @Override
            public void test1() {
                System.out.println("匿名内部类的实现方法体");
            }
        };
        i1.test1();

        new I1(){

            @Override
            public void test1() {
                System.out.println("第二个匿名内部类的实现");
            }
        }.test1(); //匿名类的匿名对象,仅适用于一次性调用
    }

    public static void main3(String[] args) {
        //普通局部内部类:在方法中声明的内部类。不可以加修饰符,可以有属性,get、set方法
        class LocalClass1{
            private int id;
            private String name;

            public int getId() {
                return id;
            }

            public void setId(int id) {
                this.id = id;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            @Override
            public String toString() {
                return "LocalClass1{" +
                        "id=" + id +
                        ", name='" + name + ''' +
                        '}';
            }
        };

        LocalClass1 localClass1 = new LocalClass1();
        System.out.println(localClass1.getId());
        System.out.println(localClass1.getName());
    }

    public static void main2(String[] args) {
        Outer.Inner2.staticTest();

        Outer.Inner2 oi2 = new Outer.Inner2(15);
        oi2.inner2Test();
    }

    public static void main1(String[] args) {
        Outer outer = new Outer();
//        outer.outerTest1(); //100
        //直接创建内部类对象,需要使用外部类对象.new
        Outer.inner1 inner1 = outer.new inner1();
        inner1.inner1Test();
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/461897.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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