Java基础-内部类介绍

java内部类介绍

内部类一共分为4种

  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类

下面我会为大家详细介绍每一个内部类!!

 

成员内部类

  成员内部类就好像是外部类的一个成员属性,也是内部类中最常见的一种,成员内部类也称为普通内部类

  定义格式:

    

    

 需要注意的有一下几点:

  

   1.内部类可以使用外部类的private , public 等修饰符修饰的变量,如果有重名变量默认使用自己的

       如果想使用外部类的需要 外部类.this.变量 方式调用重名变量,如果不是重名变量则可以直接是使用

    2.外部类无法直接使用内部类变量

    测试使用成员内部类方法

    同过以上例子可看出外部类是没有办法直接对内部类进行访问的,那该如何访问呢? 看下面

   3.外部类访问内部类必须只能通过 外部类对象.new 内部类() 实例出内部类对象,然后就可以使用内部了

   4.运行代码以后会出现两个class文件

 

 

 

静态内部类

 

 

 

  1. 静态内部类与成员内部类的区别在于静态内部类只能直接访问外部类的静态属性,
  2. 如果想要访问外部类的非静态属性只能通过new 外部类对象().外部类非静态属性;
  3. 如果外部类静态属性与内部类静态属性一致,在内部类中默认访问自己的静态属性,如果想要访问外部类重名对象只能通过类名.重名静态属性方式
  4. 创建内部类对象可以直接通过可以直接创建 内部类 对象名= new 内部类()

 

 

 

 匿名内部类

匿名内部类是不能有名称的类,所以没有办法引用他们,必须在创建时,作为new语句的一部分来声明他们

但是使用匿名内部类还有个前提条件:必须继承父类或者实现一个接口

这就要采用另一种形式new语句,如下所示:

new<类或接口><类的主题> 

这种形式的new语句声明一个新的匿名内部类,他对一个给定的类进行扩展,,或实现一个给定的接口,他还创建那个类的一个新实例,并把它作为语句的结果返回.

要扩展的类和要实现的接接口是new语句的操作数,然后跟匿名内部类的主体

注意匿名内部类的声明是在编译器进行的,实例化是在运行时进行的,这就意味着for云鬟中的一个new语句会创建相同的几个匿名内部类,而不是创建几个不同的匿名内部类的实例

从技术上说 : 匿名内部类视为非静态的内部类,所以他们具备和方法内部声明的非静态类相同的权限和限制

假如要执行的任务需要一个对象,但却不值得创建全新的对象(原因可能所属的类过于简单,或者它的内部只有一个方法),匿名内部类就显的很有用,匿名类尤其适合在swing应用程式中快速常见事件

处理程序,以下是一个匿名内部类的实例:

 

 

 

 

从上面的例子可以看出,只要一个类是抽象的或者是一个借口,那么其子类中的方法都可以使用匿名内部类来实现

使用匿名内部类需要注意以下几点!

1. 使用匿名内部类时,我们必须继承一个或者实现一个借口,但是两者不可以兼得,同时只能继承或者实现一个

  2.匿名内部类中是不能定义构造函数的

  3.匿名内部类不能存在任何静态成员变量和静态方法

  4.匿名内部类作为局部内部类(及方法内部类),所以局部内部类的所有限制同样对一个匿名内部类生效

  5.匿名内部类不能是抽象,它必须要继承的类或者实现的接口所有抽象类

 

 

方法内部类

 

  方法内部类简单一点需要注意一下几点?

    1.不能使用static修饰符与权限控制符

    2.方法内部类只能在方法内部使用

    3.如果方法与方法内部类有重名变量,方法内部类只能使用自己的

 

 

转载于:https://www.cnblogs.com/hero-hxk/p/10695159.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值