java基础学习,一些零散的笔记之内部类
内部类有着这么一句话,“接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整”。
依我的理解,一个类只能继承一个类,内部类也不另外,但为什么说内部类是的Java能解决多重继承
的问题呢。重点就在于一个类的每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否
已经继承了某个(接口的)实现,对于内部类都没有影响。所以,如果我们想一个类(在这里称之为外部类)
能解决多重继承的问题,我们可以在其内部创建多个内部类,让这些内部类各自来继承一个类,这样,外部就
具有解决多重继承问题的能力了。
- 内部类的一些特性:
1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
3、创建内部类对象的时刻并不依赖于外围类对象的创建。
4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。
- 内部内对象的创建
内部类对象的创建,分为两种情况:静态内部类和非静态内部类
1.非静态内部类
非静态内部类的对象的创建,必须先创建外部类的对象outerInstance,再用outerInstance.new
一个内部类的对象,语法如下:
- OuterClass outerClass = new OuterClass();
- OuterClass.InnerClass innerClass = outerClass.new InnerClass();
2.静态内部类
静态内部类由于是静态的,在外部类初始化时就被加载了,所以不用拿到外部类的对象就能直接new了,
语法如下:
OuterClass.InnerClass2 c1 = new InnerClass2();
关于静态内部类的详细学习内容,可通过以下网站进行学习: http://www.imooc.com/code/2095
以下为类定义的代码:
public class OuterClass { public OuterClass(){ System.out.println("创建外部类对象"); } class InnerClass{ public InnerClass(){ System.out.println("创建内部类InnerClass1的对象,它是非静态的"); } } static class InnerClass2{ public InnerClass2(){ System.out.println("创建内部类InnerClass2的对象,它是静态的"); } } }
- 内部类的分类
1.成员内部类
Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,
如 public 、 protected 、 private 等。详细的内容可进入慕课网学习,网址:
http://www.imooc.com/code/2092
2.方法中的内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。