关于内部类的一些总结。
2017-10-15 23:18
225 查看
http://andy136566.iteye.com/blog/1061951/ 原文在这里,但是因为排版问题,自己在这里修改并完善。
首先介绍内部类有什么用,这是最重要的,毕竟知道应用场景之后,以后遇到可以使用。
1.内部类可以很好的实现隐藏(一般的非内部类,是不允许有 private 与protected权限的,但静态内部类、成员内部类可以)
2.内部类拥有外部类的所有元素的访问权限
3.可以实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。
以下为例子:
1、实现隐藏
2、可以无条件地访问外围类的所有元素
3.可以实现多重继承
这个特点非常重要,个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了,它可以使我们的类通过内部类继承不同的类以达到伪多重继承。
四、 避免修改接口而实现同一个类中两种同名方法的调用
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们?这就需要我们的内部类了。
想问一下大家test()这个方法是属于覆盖MyAbstract这里的方法呢?还是MyInterface这里的方法。显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。
首先介绍内部类有什么用,这是最重要的,毕竟知道应用场景之后,以后遇到可以使用。
1.内部类可以很好的实现隐藏(一般的非内部类,是不允许有 private 与protected权限的,但静态内部类、成员内部类可以)
2.内部类拥有外部类的所有元素的访问权限
3.可以实现多重继承
4.可以避免修改接口而实现同一个类中两种同名方法的调用。
以下为例子:
1、实现隐藏
public class Outter { private class Inner{ } private static class Inner2{ } }
2、可以无条件地访问外围类的所有元素
public class Outter { private int num; private class Inner{ public void test(){ System.out.println(num); } } }
3.可以实现多重继承
这个特点非常重要,个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了,它可以使我们的类通过内部类继承不同的类以达到伪多重继承。
类一 public class Example1 { public String name() { return "ghy"; } } 类二 public class Example2 { public int age() { return 25; } } 类三 public class Outter{ private class Inner1 extends Example1{ public String name(){ return super.name(); } } private class Inner2 extends Example2{ public int age(){ return super.age(); } } public String name(){ return new Inner1().name(); } public int age(){ return new Inner2().age(); } }
四、 避免修改接口而实现同一个类中两种同名方法的调用
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们?这就需要我们的内部类了。
public interface MyInterface { public void test(); } public abstract class MyAbstract { public abstract void test(); } public class MyTest extends MyAbstract implements MyInterface{ public void test() { } }
想问一下大家test()这个方法是属于覆盖MyAbstract这里的方法呢?还是MyInterface这里的方法。显然这是不好区分的。而我们如果用内部类就很好解决这一问题了。
public class MyTest extends MyAbstract { @Override public void test() { } public class Inner implements MyInterface{ @Override public void test() { //do something } } }
相关文章推荐
- java关于内部类的一些总结
- 黑马程序员 关于内部类的一些知识总结
- 关于移动端 rem 布局的一些总结
- 关于new,delete,malloc,free的一些总结
- 关于swift的一些属性总结
- 关于接口,内部类,异常的一些介绍
- 关于java中this的一些总结
- 关于css3的Transition,Transforms以及动画的一些总结
- 关于JS和浏览器的一些总结
- 关于移动端开发的一些总结
- 关于JavaScript性能的一些总结
- 关于servlet的一些总结
- 关于webservice一些自我总结
- 关于抽象类与接口的一些总结
- 关于项目中异常处理的一些总结(转)
- 关于开发简易搜索引擎的一些总结和思考
- 关于递归思想与prolog中的一些递归应用总结
- 关于UT的一些总结
- C++中关于虚拟继承的一些总结
- 关于C++容器的一些总结