码迷,mamicode.com
首页 > 其他好文 > 详细

内部类

时间:2019-12-02 13:30:02      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:函数   自己   初始化   需要   不能   调用   匿名   构造   new   

为什么要使用内部类?

1、内部类方法可以访问定义它所在的作用域中的数据,包括私有的数据。

2、可以对同一个包中的其他类隐藏起来

3、想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

静态内部类与非静态内部类

静态内部类用static修饰,类与一个独立的类差别不大,除了位置放在外部类里面。与其他内部类相比,静态内部类与外部类联系也不大,只能访问外部类的静态变量和方法,但不能访问实例变量和方法。在类内部可以直接使用静态内部类,在外部,类似静态变量与静态方法,可以通过“外部类.静态内部类”使用,不生成外部类实例。

静态内部类的实现(内部类如何访问外部类的静态私有变量):每个内部类最后都会编译为一个独立的类,Java为外部类自动生成一个非私有的方法访问私有变量并返回。

非静态内部类没有static修饰,与静态内部类不同,它的实例总是与一个外部类实例相连的,因此需要先创建外部类实例,再创建内部类实例。除了静态变量和方法,非静态内部类可以直接访问外部类的实例变量和方法。但它自己不能定义静态变量和方法。可以理解为,内部类是与外部类实例相连的,而静态变量和方法是类的属性和方法,一般是独立使用的,在内部类中意义不大。如果真的需要静态变量和方法,就挪到外部类去吧。

非静态内部类的实现(内部类如何访问外部类的私有变量和方法):内部类有一个实例变量指向外部类对象,它在构造方法中被初始化,即指向已经生成的外部类对象。同时外部类生成了两个非私有静态方法,一个访问静态变量,一个访问静态方法。

方法内部类

顾名思义方法内部类就是在方法内部定义的类,只能在定义的方法内部使用,它对外部类的访问权限与所在的方法相同,即若方法是实例方法(非static),则可以访问外部类的实例变量和方法;若是静态方法,则只能访问外部类的静态变量和方法。方法内部类还可以直接访问方法的参数和方法中的局部变量,但局部变量和参数必须声明为final

匿名内部类

匿名内部类在创建对象的同时定义类。只能被使用一次,用来创建一个对象,它没有名字,没有构造方法,但可以调用对应的父类构造方法,也可以访问外部类的所有变量和方法。

public void sortIgnoreCase(String[] strs){

  Arrays.sort(strs, new Comparator<String>() {

    @Override

    public int compare(String o1, String o2) {

      return o1.compareToIgnoreCase(o2);

    }

  });

}

????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

内部类

标签:函数   自己   初始化   需要   不能   调用   匿名   构造   new   

原文地址:https://www.cnblogs.com/licheee/p/11969834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!