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());

}
时间: 2024-09-29 23:30:49

Java内部类和内部接口的相关文章

【Simple Java】Java中的内部接口

什么是内部接口 内部接口也称为嵌套接口,即在一个接口内部定义另一个接口.举个例子,Entry接口定义在Map接口里面,如下代码: public interface Map { interface Entry{ int getKey(); } void clear(); } 为什么要使用内部接口 如下是一些有一些强有力的理由: 一种对那些在同一个地方使用的接口进行逻辑上分组: 封装思想的体现: 嵌套接口可以增强代码的易读性和可维护性: 在Java标准库中使用内部接口的一个例子是java.util.

【解惑】领略Java内部类的“内部”

转自:http://android.blog.51cto.com/268543/384809 内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1.私有内部类 -- 在方法之间定义的内部类,非静态 我们首先看看类中内部类的两个特点: (1) 在外部类的作用范围内可以任意创建内部类对象,即使内部类是私有的(私有内部类).即内部类对包围它的外部类可见. 例如 (实际上,内部类是可以设置为public公开的,但一般我是当做成员

Java语法之内部接口的学习 —— What Is Inner Interface in Java?

What is Inner Interface in Java? Inner interface is also called nested interface, which means declare an interface inside of another interface. For example, the Entry interface is declared in the Map interface. public interface Map { interface Entry{

Java 内部类综述

摘要: 多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.但有时候,我们确实是需要实现多重继承,而且现实生活中也真正地存在这样的情况,比如遗传:我们即继承了父亲的行为和特征也继承了母亲的行为和特征.可幸的是,Java 提供了两种方式让我们曲折地来实现多重继承:接口和内部类.事实上,实现多重继承是内部类的一个极其重要的应用.除此之外,内部类还可以很好的实现隐藏(例如,私有成员内部类).内部类共有四种类型,即成员内部类.静态内部类.

Java内部类的使用小结

内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类即类名和文件名相同的只能使用public和default). 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类.对于一个名为outer的外部类和其内部定义的名为inner的内部类.编译完成后出现outer.class和outer$inner.class两类.所以内部类的成员变量/方法名可

(转载)Java内部类的使用小结

原文摘自:http://android.blog.51cto.com/268543/384844/ 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的,也可用public,default,protected和private修饰.(而外部顶级类即类名和文件名相同的只能使用public和default). 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类.对于一个名为outer的外部类和其内部定义的名为inner的内部类.编译完成

Java:内部接口

1.什么是内部接口 内部接口也称为嵌套接口,即在一个接口内部定义另一个接口.举个例子,Entry接口定义在Map接口里面,如下代码: public interface Map { interface Entry{ int getKey(); } void clear(); } 2.为什么要使用内部接口 如下是一些强有力的理由: 一种对那些在同一个地方使用的接口进行逻辑上分组: 封装思想的体现: 嵌套接口可以增强代码的易读性和可维护性: 在Java标准库中使用内部接口的一个例子是java.util

Java内部类

本文是<Java核心技术 卷1>中第六章接口与内部类中关于内部类的阅读总结. Java中的内部类(inner class)是定义在另一个类内部的类.那么内部类有什么用呢?这里主要由三个内部类存在的原因: 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据.即,如果类A中定义了类B,那么类B可以访问类A中的数据,甚至是私有数据,但类A不能访问类B中的私有数据: 内部类可以对同一个包中的其他类隐藏起来.在一个包中,定义一个类时,即使不加上访问权限关键词,这个类也是包内其他类可访问的,不

[转] Java内部类详解

作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟.下面是本文的目录大纲: 一.内部类基础 二.