java 内部类的理解

一. 内部类的作用:

a. 提供了一种代码隐藏机制
b. 当生成一个内部类对象时,此对象与制造它的外围对象之间就有了一种联系,也就是对外围对象的一个引用,它能访问外围对象所有成员

二. 内部类的种类:

1. 成员内部类:是最普通的内部类,定义于另一个类的内部
2. 局部内部类:定义在一个方法或者作用域里面的类,它就像方法里面的一个局部变量,不能有权限修饰符以及static修饰符
3. 匿名内部类:就是没有名字的类,唯一一种没有构造器的类,大部分匿名内部类用于继承其他类或是实现接口
4. 静态内部类:又名嵌套类,若不需要内部类对象与其外围类对象之间有联系则可使用静态内部类

三. 静态内部类使用小技巧

1. 如果你想要创建某些公共代码,使得它们可以被某个接口的所有不同实现所公用,那么使用静态内部类会非常方便

public interface ClassInInterface {
	void fun();
	static class Inner {  // static可以不用写,默认就是public static的
		// 此类中可写所有实现类所公用的代码。
		int i, j, k;
		public Inner() {}
		public static void main(String[] args) {
			...
		}
	}
} ///:~

2. 使用嵌套类来放置测试代码。(在每个类都使用main方法来测试有一个缺陷,就是必须带着那些已经编译过的额外代码,使用嵌套类则不会。)

class TestBed {
	TestBed() {}
	void f() { 
		System.out.println("f()"); 
	}
	public static class Tester {
		public static void main(String[] args) {
			TestBed t = new TestBed();
			t.f();
		}
	}
} ///:~

四. 重点:为什么需要内部类?

如果只是需要一个对接口的引用,为什么不通过外围类来实现那个接口?答案是:“如果这能满足,那么就应该用外围类。”,那么内部类实现和外围类实现有什么区别呢?因为使用内部类最吸引人的地方是:“每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。”,内部类使得多重继承变得完整,内部类允许继承多个非接口类型(抽象类)

class D {}
abstract class E {}
class Z extends D {
	E makeE () {
		return  new E() {};
	}
}
public class MultiImplementation {
	static void takesD(D d) {}
	static void takesE(E e) {}
	public static void main(String[] args){
		Z z = new Z();
		takesD(z);
		takesE(z.makeE());
	}
}

参考:Java编程思想

    原文作者:弦上的梦
    原文地址: https://blog.csdn.net/qq_34997906/article/details/84728002
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞