前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内部类的作用

内部类的作用

作者头像
lwen
发布2018-04-17 16:24:09
6330
发布2018-04-17 16:24:09
举报
文章被收录于专栏:Java 源码分析Java 源码分析

一、 作用

  1. 内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以加上这几个修饰词。
  2. 内部类拥有外围类的所有元素的访问权限,可以直接访问外部类的私有属性及方法
  3. 可以间接实现多重继承,多个内部类继承不同的类形成了一个类中复用了多个类的方法。
  4. 可以避免在继承一个父类和一个接口的时候导致的方法重复定义。

二、详解

1.实现隐藏
代码语言:javascript
复制
public class Example {

    //private 修饰词

    private class InsideClass implements InterfaceTest

    {

         public void test()

         {

             System.out.println("这是一个测试");

         }

    }

}
2.可以无条件地访问外围类的所有元素
代码语言:javascript
复制
public class TagBean {
 private String name="lwen";
   private class InTest{
     public InTest(){
         System.out.println(name);
     }
   }
}
3.可以间接实现多重继承

​ 个特点非常重要,个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。

代码语言:javascript
复制
class Test{
    class A extends C {

    }
    class B extends D{
        
    }
}
四、 避免同名方法的冲突。

如果你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内部类了。看下面的代码

代码语言:javascript
复制
public interface Incrementable {
    void increment();
}

public class Test{
    public void increment() {
        System.out.println("Other increment()");
    }
}

public class Callee2 extends MyIncrement implements Incrementable {
    public void increment() {

    }
}

increment()这个方法是属于覆盖MyIncrement这里的方法呢?还是Incrementable这里的方法。我怎么能调到MyIncrement这里的方法?显然这是重复定义。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 作用
  • 二、详解
    • 1.实现隐藏
      • 2.可以无条件地访问外围类的所有元素
        • 3.可以间接实现多重继承
          • 四、 避免同名方法的冲突。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档