内部内的创建与使用

内部内有几种,为局部内部内,成员内部内,匿名内部内(局部内部类的一种),静态内部内,非静态内部内;

来说说这几个内部内。

如何访问内部内的成员:外部类名.内部类名 对象名 = 外部类对象.内部类对象;

成员内部内:在成员位置定义的类叫做成员内部类局部位置。

例如:

public class Body{//外部类 身体

 private boolean life = true;//生命状态

    public class Heart{//内部类 心脏
        public void jump(){//跳动
            System.out.println("心脏在跳");
            System.out.println("声明状态:" + life);//内部类方位外部类中的成员变量
        }

        public void setLife(boolean li){
            life = li;//内部类能够调用外部类中的元素
        }

        public class blood{
            public void print(){
                System.out.println("我是心脏里面的血管");
            }
        }
    }

}

public class BodyTest {
    public static void main(String[] args) {
        //创建一个内部类对象
        Body.Heart bh = new Body().new Heart();

        //调用内部类中的方法
        bh.jump();
        bh.setLife(false);
        bh.jump();

        Body.Heart.blood bhb = new Body().new Heart().new blood();
        bhb.print();
    }
}

局部内部类:在局部位置定义的类,被称为局部内部类

例如:
public class Cat {//外部类
    private String name = "大橘为重";

    public void m(){
        //局部变量如果在内部类中使用必须使用final进行修饰
        final int age = 5;
        //局部内部类不允许使用访问控制修饰符,只能使用final和abstract进行修饰
          class say{
            public  void m2(){
                System.out.println("喵喵喵喵喵");
            }
        }
        //在定义局部内部类的方法中对局部内部类进行创建对象
        new say().m2();
    }
}

public class CatTest {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.m();
    }
}
 

匿名内部类:匿名内部类的作用和格式
    作用:匿名内部类是创建某个类型的子类对象的快捷方式
    格式:
new 父类或接口(){
    //进行方法重写
}

public class Demo {
    public static void main(String[] args) {
        //接口不能创建对象
        Person p = new Person() {//这一对花括号中的内容就是匿名内部类
            //实现接口中的所有的抽象方法就可以了
            @Override
            public void eat() {
                System.out.println("吃米饭");
            }
        };
        //如果对接口创建了对象,使用匿名内部类的方法是将接口中的方法实现了
        //那么我们可以通过调用接口创建的对象将这个方法调用出来
        p.eat();
    }
}

静态内部内:是指在创建内部类的时候使用static修饰的内部类

在创建静态内部类的时候,不需要创建外部类对象

外部类名.内部类名 对象名 = new 外部类名.内部类名();

public class Outer {
    private String name1 = "旺财";
    static class Inner {
        String name2 = "来福";
        public void m(){
            //1、静态内部类不能直接访问外部类中非静态的成员变量
            //2、如果想要访问这些变量需要创建对象
            System.out.println("外部类的成员变量:" + new Outer().name1);
        }
    }

    //在静态内部类的外部成员的位置写一个方法,创建内部类对象,调用静态内部类的方法
    public void m2(){
        new Inner().m();
    }

}

非静态内部类:

创建对象格式:外部类名.内部类名 对象名 = new 外部类名().new 内部类名();

 public static void main(String[] args) {
        Outer.Inner in = new Outer.Inner();
    }
}
静态内部类中可以定义静态成员和非静态成员。其他类在调用外部类中的静态内部类的时候,需要通过完整的类名访问静态内部类中的静态的成员.如果要访问静态内部类中的其他非静态成员,需要通过静态内部类的对象进行调用
public class Outer_02 {
    static class Inner_02{
        int a = 10;//静态内部类的非静态成员变量
        static int b = 20;//静态内部类的静态的成员变量
    }
}

public class OuterTest {
    public static void main(String[] args) {
        Outer_02.Inner_02 oi = new Outer_02.Inner_02();
        System.out.println(oi.a);//访问静态内部类中非静态的变量
        System.out.println(Outer_02.Inner_02.b);//访问静态内部类中静态的变量
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值