内部类

内部类
1、 概念
在类的内部定义的类就是内部类,外部的类称为外部类。
2、 特点
是一个完整的、独立的类。
可以有属性、方法、构造、代码块。
编译之后会有独立的class文件,同样可以产生对象。
3、 class文件名
成员内部类 :外部类的类名 + $+内部类名。

局部内部类:外部类的类名 + $+1+内部类名。(1表示局部内部类的顺序)

4、 类型
4.1成员内部类
4.1.1 概念:作为类的成员,存在于某个类的内部。(用法与成员变量类似)

4.1.2 位置:位于外部类的全局位置。

4.1.3 语法:public class OutClass {

     public class student{
     public void c(){   
      }
   }

4.1.4 访问修饰符:决定能否在第三方访问该内部类

4.1.4 特点:(1)在外部类的内部可以产生成员内部类的方法,可以访问外部类的所有的成员和方法,不受访问修饰符的限制。

      (2) 不能定义static的属性和方法。

      (3)可以访问外部类的任意属性和方法。

       (4)使用this代表的是内部类对象。

(5)如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性;
如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法。

      (6)可以在外部类里面直接产生内部类对象,然后无视访问修饰符视情况调用其属性和方法

      (7)在第三方类中产生内部类对象,必须先产生外部类对象。
             使用特殊外部类对象.new的语法产生内部类对象,
           根据访问修饰符视情况调用属性和方法。

4.1.5 产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)

4.2 静态内部类
4.2.1 概念:作为类的静态成员,存在于某个类的内部。(是成员内部类的特例)
4.2.2 位置:位于外部类的全局位置,添加static 修饰符。
4.2.3 语法:
public static class student2{
public void c(){
}
}

4.2.4访问修饰符:决定能否在第三方访问该内部类。

4.2.5 特点:(1) 可以访问外部类中的静态成员和静态方法;

       (2) 可以声明静态变量和成员变量,静态属性和成员属性;

       (3)只能访问外部类的静态属性和静态方法;

         (4)this代表内部类对象;

(5)如果属性方法出现同名的情况,用外部类类名.的方式访问外部类中的属性方法;

       (6)只能访问外部类的静态属性和静态方法;

       (7)用对象名.的方式访问内部类的非static属性和方法,无视访问修饰符;

    (8)用内部类类名.的方式访问内部类的static属性和方法,无视访问修饰符;

(9)无需产生外部类对象,使用外部类类名.内部类类名的方式产生内部类对象;
(10)根据访问修饰符,调用属性和方法;
4.2.6产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)
4.3 局部内部类
4.3.1 概念:存在于某个方法内部的类。

4.3.2 位置:在外部类的某个方法内部。

4.3.3 语法:
public void study(){
class student3{

           }    
            }

4.3.4特点:(1)如果外部方法是静态方法,那么就不能访问外部类中的成员变量和成员方法.

      (2)没有访问修饰符。

(3)只能定义非static的属性和方法

(4)如果局部内部类所在的方法是静态的,则不能访问外部类的非静态属性和方法;其他情况都可以访问。

        (5)this代表当前内部类对象。

(6)如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性。

    (7)如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法。

        (8)无法访问内部类所在方法的变量,只能访问常量。

        (9)直接new出来即可,无视访问修饰符视情况调用其属性和方法。

4.4 匿名内部类

4.4.1 概念:存在于某个类的内部,但是无类名的类。

4.3.2 语法:
new 类或者接口的名字( ){

   //匿名内部类的主体   }

4.3.3访问修饰符:不存在。

4.3.4 特点:(1)只能定义非static的属性和方法

(2)如果outMethod是静态的,则不能访问外部类的非静态属性和方法;其他情况都可以访问

        (3)this代表当前的匿名内部类对象

(4) 如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性

 (5)如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法

       (6)无法访问内部类所在方法--即outMethod()中的的局部变量,只能访问常量
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值