上一篇博客中讲述了Java中的接口,那这篇博客主要讲一下内部类的问题。
所谓的内部类就是类里面定义了类,比如身体和心脏。内部类的分类有成员内部类,局部内部类,局部内部类又包含了匿名内部类。
成员内部类就是对象的成员变量,局部内部类是定义在一个成员方法里的类。
成员内部类:
package demo_practice; public class Outer { int i = 20; public void speak(){ System.out.println("我会说话"); } public class inner{ int i = 10; public void run(){ System.out.println("我会跑步"); } //如何在访问内部类和外部类中重名的变量 public void print(){ System.out.println(i);//内部类 System.out.println(this.i);//内部类 System.out.println(Outer.this.i);//外部类 } } }
调用方式:
package demo_practice; public class Demoouter { public static void main(String[] args) { Outer o = new Outer(); System.out.println(o.i); o.speak(); //成员内部类的创建方式以及调用方式 Outer.inner i = new Outer().new inner(); System.out.println(i.i); i.run(); System.out.println("=================="); i.print(); } }
结果为:
注意点:
内用外,随意访问,外用内,需要创建对象
生成两个class文件!
局部内部类:
调用方式:
public class Demoouter1 { public static void main(String[] args) { Outer1 o = new Outer1(); o.outerMethod(); } }
结果:
注意点:对于修饰符来说
外部类:public 或者 不写
成员内部类:public protect 不写 private
局部内部类:什么都不写
匿名内部类:
匿名内部类继承一个类或者是实现一个接口不需要用extends和implement关键字,匿名内部类不能同时实现一个接口有继承一个类,匿名内部类前不能有修饰符,也不能定义构造方法,因为他没有名字,因此在创建对象的时候不能带参数,因为默认的构造方法没有参数。
内部类和外部类的使用方式?
在外部类中,通过一个内部类的引用对象引用内部类的成员,同时在内部类中也可以直接访问到外部类的成员,内部类也可以创建也可以通过创建对象从外部类之外被调用,但是必须将内部类声明为public。
怎样使用匿名内部类的对象?
匿名内部类是指可以利用内部类创建没有名称的对象,他进一步完成了声明内部类和创建该类的一个对象,并利用该对象访问到里面的成员,这种类不取名字,而是直接利用其父类的名字或者时接口的名字,而且匿名内部类的定义与创建该类的一个实例对对象同时进行。
这篇博客就说到这吧!有兴趣的一起交流啊!