2021-4-6-2 面向对象16:内部类

首先说一下,本节东西都是些奇葩东西,不符合规范的,但是还是要知道,以防以后不会看别人的奇葩代码。

什么是内部类、外部类

  • 内部类就是在一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了。
    1. 成员内部类
public class Outer {
    private int id = 123 ;
    public void test(){
        System.out.println("外部类的方法。");
    }

    public class Inner {
        public void test2(){
            System.out.println("这是内部类。");
        }
    }
}
public class Application {
    public static void main(String[] args) {
        Outer out = new Outer();
        Outer.Inner in = out.new Inner();//必须通过外部类实例化的对象来new出内部类的实例

        in.test2();
    }
}
  • 作用
  1. 内部类可以直接访问外部类的私有属性、方法
public class Outer {
    private int id = 123;
    private void test(){
        System.out.println("外部类的方法。");
    }

    public class Inner {
        public void test2(){
            System.out.println("这是内部类。");
        }

        public void printOuterId(){
            System.out.println(id);
        }

        public void useOuterTest(){
            test();
        }
    }
}
public class Application {
    public static void main(String[] args) {
        Outer out = new Outer();
        Outer.Inner in = out.new Inner();

        in.printOuterId();//输出外部类的私有属性
        in.useOuterTest();//使用外部类的私有方法
    }
}

2. 静态内部类
也就是在内部类前面加个static关键字,详细自己出查。或者以后补充。

3. 匿名内部类

public class Application {
    public static void main(String[] args) {
        /*
        正常情况我们实例化类都会用一个变量其保存
         */
        Cat xiaohei = new Cat();
        xiaohei.eat();

        /*
        我们也可以不用变量去保存,成为匿名
         */
        new Cat().eat();

        /*
        接口可以匿名new出来,真TM神奇,不过也必须重写接口的方法。
        其实就是不知道哪个类去实现了这个接口,所以称为“匿名”
         */
        new userService(){
            @Override
            public void add(String name) {}
        };

        /*
        甚至接口可以用变量存储起来
         */
		UserService admin = new UserService(){
            @Override
            public void add(String name) {}
        };
    }
}

class Cat{
    public void eat(){
        System.out.println("吃饱了。");
    }
}

interface userService{
    void add(String name);
}

5. 局部内部类
在方法里面定义的

public class Application {
    public void getId(){
        class Cat{

        }
    }
}

6.
一个java类中可以有多个class类,但是只能有一个public class类,当然,也可以写接口。

public class Application {

}

class A {
    public static void main(String[] args) {

    }
}

interface B {
	void add(String name);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值