内部类

可以将一个新类的定义放在另一个类的定义内部,这就是内部类
内部类分为成员内部类匿名内部类,其中成员内部类又有静态内部类非静态内部类

内部类的作用

  1. 内部类提供了更好的封装,只能让外部类直接访问,不允许同一个包中的其他类直接访问。
  2. 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的私有成员,但外部类不能访问内部类的私有属性。

内部类的使用场合:

由于内部类提供了更好的封装特性,并可以很方便的访问外部类的属性。所以通常内部类只为外部类提供服务的情况下优先使用。

用一段代码来观察一下非静态内部类

class Person {
    String name = "张三";//外部类不能访问内部类私有属性
    class eyes{
        void eye() {
            String shape = "circle";
            System.out.println(name);  //内部类可以访问外部类属性
            System.out.println("眼睛");
        }
    }

}
public class Test {
    public static void main(String[] args) {
    Person p = new Person();
    Person.eyes eye = p.new eyes();
    eye.eye();
    }
}
/**
 - output:
 - 张三
 - 眼睛
 */

列举一下非静态内部类要点:
- 非静态内部类必须寄存在一个外部类对象里,因此,如果有一个非静态内部类对象,那么一定存在一个对应的外部类对象。非静态内部类对象单独属于外部类某个对象。
- 非静态内部类可以访问外部类成员,但是外部类不能直接访问非静态内部类成员。
- 非静态内部类不能有静态属性、静态方法、静态初始化块。
- 静态成员不能访问非静态成员。外部类的静态方法、静态成员不能访问非静态内部类。

静态内部类:

class Person {
    String name = "张三";  //外部类不能访问内部类私有属性
    static class eyes{
        void eye() {
            String shape = "circle";
            /*System.out.println(name); */ //静态内部类不可以可以访问外部类属性
            System.out.println("眼睛");
        }
    }
}
public class Test {
    public static void main(String[] args) {
    Person.eyes p = new Person.eyes();
    p.eye();
    }
}
/**
 * output:
 * 眼睛
 */

匿名内部类一般用在时间监听方法中,这里暂时略过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值