Java—初学—内部类


类A的内部定义类B,类B就是内部类


==============================================

内部类的访问特点:


===================================================

内部类的位置


成员位置定义的类,称为成员内部类

局部位置定义的类,称为局部内部类


--------------------------------------------------------------------------------------------------


======================================================

访问成员内部类

外部类名.内部类名 对象名 = 外部类对象.内部类对象


================================================


================================================

成员内部类的常见修饰符


1) private




2) static

为了方便访问数据。

静态就是为了外部通过类名使用的,不会搭配 private 而是 public

静态只能访问静态



还有一个方式访问 show2()

静态方法可以用类名调用:Outer.Inner.show2()


==================================================

面试题:

内部类和外部类,没有继承关系!不能用super


更高级的做法:Outer.this


=====================================================

局部内部类

1. 可以直接访问外部类成员,

2. 在局部位置创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能



面试题:


局部内部类,访问局部变量 必须用final修饰,

为什么呢?

因为局部变量会随着方法的调用完毕而消失,而局部对象并没从堆中消失,还要使用

那个变量。为了让数据还能被继续使用,就用final修饰。这样在堆内存中存储的其实

是一个常量值。num2消失了,但是数据20还在内存,还是可以被使用。



反编译一下,发现num2已消失,但是 20还在


=====================================================


存在一个类或者接口

格式:

       new 类名/接口名(){

       重写所有的抽象方法;

       }

本质是:一个类的子类,或抽象类的具体类,或者接口的实现类的对象

             一个继承了类或者实现了接口的子类匿名对象

===============================

匿名内部类的方法调用


在子类对象后,加上“.show();”就行了。编译看左边,接口Inter中有show(),编译

不报错,但是运行看右边,方法被重写了,因此调用子类中的show()


=====================================================

接口内有两个方法时:




上述方法太麻烦,重复

多态改进:




====================================================


形参为接口时:


接口做形式参数时,其实时想引用接口实现类的对象

既然是对象,那么匿名内部类就是接口的子类匿名对象

改进:(直接用匿名内部类,调用次数多的话,不建议使用该方法)



================================================

面试题:

补齐下面代码:


答案:

分析 

1. 根据 Outer.method(),能够看出,method应该是Outer类的静态方法              

 
class Outer {
      public static Inter method(){

      } 
  }

2. 后接".show()"说明方法mehtod返回的是一个对象。而show()方法是接口Inter的,因此利用Inter的匿名内部类。

 return new Inter{ public void show(){system.out.println("HelloWorld")}};

所以需要补齐的代码是:


=========================================================











猜你喜欢

转载自blog.csdn.net/u013116760/article/details/80038395