一、内部类
1.在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。
2.Inner class 一般用在定义它的类或语句块之内,在外部引用它时,必须给出完整的名称。
Inner class 的名字不能与包含它的类名相同。
3.Inner class 可以使用外部类的私有数据,因为它是外部类的成员,同一个类的成员之间可以互相访问。而外部类要访问内部类中的成员需要:内部类.成员 或者是 内部类对象.成员。
4.分类:成员内部类(static成员内部类和非static成员内部类)
局部内部类(不谈修饰符)
匿名内部类
5.内部类举例
package day15; public class Test3 { int i; public int x; private int z; class A{//内部类 int i;//内部类也可以有自己的属性,与外部类不冲突 public void setTest3Fileds(){ Test3.this.i = 1; Test3.this.x = 2; Test3.this.z = 3;//内部类可以调用外部类的属性 } public void set(){//内部类调用自己属性的方法 this.i = 10; } } public void setInfo(){//外部类调用自己属性 new A().setTest3Fileds();//外部的类要用自己内部类的方法,要先new内部类的对象 } public void showInfo(){ System.out.println(this.i); System.out.println(this.x); System.out.println(this.z); } public static void main(String[] args){ Test3 t = new Test3(); t.setInfo(); t.showInfo(); } }
打印结果为:
1
2
3
二、内部类特性
1.Inner class 作为类的成员:
①可以声明为final的
②和外部类不同,Inner class 可声明为private或protected
③Inner class 可以声明为static的,但此时就不能再使用外层类的非static的成员变量
④Inner class作为类:可以声明为abstract类,因此可以被其他的类继承
注意:非static的内部类中的成员不能声明为static的,只有在外部类或static的内部类中才可声明static成员。
package day15; public class Test3 { int i; public int x; private int z; class A{//内部类 } //可以有多个内部类,可以是final的 final class B{ } //内部类可以声明为抽象类 abstract class C{ } //如果内部类是static的,就不能使用外部的非static成员 static class D{ } //内部类可以被继承 class E extends C{ }
问题:内部类有什么用?
答:内部类主要是解决Java不能多层继承的问题。
package day15; public class Test4 { public static void main(String[] args){ A a = new A(); a.testB(); a.testC(); } } /** * 现在类A想要同时的获得类B和类C的方法,并且重写 * 可以使用内部类来变相的实现类的多重继承,可以同时继承多个类 * */ class A{ public void testB(){ new InnerB().testB(); } public void testC(){ new InnerC().testC(); } private class InnerB extends B{ public void testB() { // TODO Auto-generated method stub System.out.println("这是重写之后的testB方法"); } } private class InnerC extends C{ public void testC() { // TODO Auto-generated method stub System.out.println("这是重写之后的testC方法"); } } } class B{ public void testB(){ } } class C{ public void testC(){ } }
内部类的最大作用就是实现多重继承。
三、面向对象总结