Java内部类和内部接口

内部类定义

  • 将一个类的定义放在另一个类的内部. 这就是内部类.
  • 内部类依赖外部类存在.

内部类访问访问权限

  • public:访问不受限制。
  • protected:访问仅限于包含类或从包含类派生的类型。只有包含该成员的类以及继承的类可以存取.
  • protected internal:访问仅限于当前程序集或从包含类派生的类型。
  • private:访问仅限于包含类型。只有包含该成员的类可以存取.

内部类种类

  • 静态内部类static inner class (also called nested class)
  • 成员内部类member inner class
  • 局部内部类local inner class
  • 匿名内部类anonymous inner class

内部类的特性

  • 它可以把一些逻辑相关的类组合起来,并控制内部的类的 可见性. 这个是内部类一种隐藏机制.
  • 内部类了解外部类,并能与之通信.

静态内部类

  • 类定义时加上static关键字,不能和外部类有相同的名字。   
  • 名称为OuterClass$InnerClass.class的形式.
  • 只可以访问外部类的静态成员和静态方法,   
  • 包括了私有的静态成员和方法。   
  • 生成静态内部类对象的方式为:
     OuterClass.InnerClass inner = new OuterClass.InnerClass();

成员内部类

  • 成员内部类Member Inner Class
  • 成员内部类也是定义在另一个类中,但是定义时不用static修饰。
  • 成员内部类和静态内部类可以类比为非静态的成员变量和静态的成员变量。
  • 成员内部类就像一个实例变量。
  • 它可以访问它的外部类的所有成员变量和方法,
    不管是静态的还是非静态的都可以。
  • 在外部类里面创建成员内部类的实例:
    this.new Innerclass();
  • 在外部类之外创建内部类的实例:
    (new Outerclass()).new Innerclass();
  • 在内部类里访问外部类的成员:Outerclass.this.member

局部内部类

  • 局部内部类定义在方法中,比方法的范围还小。
    是内部类中最少用到的一种类型。
  • 像局部变量一样,不能被public, protected, private和static修饰。
  • 只能访问方法中定义的final类型的局部变量。
  • 局部内部类在方法中定义,所以只能在方法中使用,
    即只能在方法当中生成局 部内部类的实例并且调用其方法。

匿名内部类

  • 匿名内部类不能有构造方法。
  • 匿名内部类不能定义任何静态成员、静态方法。
  • 匿名内部类不能是public,protected,private,static。
  • 只能创建匿名内部类的一个实例。
  • 一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。
  • 因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

内部类的特性

  • 内部类如何实现隐藏代码实现的功能.
interface DemoInterface{
    public void getStringDemo();
}

public class Demo1{
    private class DemoOne implments DemoInterface{
        public void getStringDemo(){
            return "abcdefg";
        }
    }
    public DemoInterface getDemoInterface(){
        return new DemoOne();
    }
}

public class TestMain(){
    Demo1 demo = new Demo1();
    DemoInterface demointerface = demo.getDemoInterface();
    System.out.println(deominterface.getStringDemo());

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。