Java内部类(4):静态内部类&接口内部类

使用static修饰的内部类我们称之为静态内部类,不过我们更喜欢称之为嵌套内部类。静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态内部类却没有。没有这个引用就意味着:

1、 它的创建是不需要依赖于外围类的。

2、 它不能使用任何外围类的非static成员变量和方法。

 1 interface Contents {
 2     int value();
 3 }
 4
 5 interface Destination {
 6     String readLabel();
 7 }
 8
 9 class Test005Sub {
10
11     private static class ParcelContents implements Contents {
12         private int i = 11;
13
14         public int value() {
15             return i;
16         }
17     }
18
19     static class ParcelDestination implements Destination {
20         private String s;
21
22         private ParcelDestination(String s) {
23             this.s = s;
24         }
25
26         public String readLabel() {
27             return s;
28         }
29
30         public static void f() {
31         }
32
33         static int x = 10;
34
35         static class AnotherLevel {
36             {
37                 x = 111;
38                 System.out.println(x);
39             }
40         }
41     }
42
43     public static Contents contents() {
44         return new ParcelContents();
45     }
46
47     public static Destination destination() {
48         return new ParcelDestination("Hello World!");
49     }
50 }
51
52 public class Test005 {
53     public static void main(String[] args) {
54         Contents c = Test005Sub.contents();
55         Destination d = Test005Sub.destination();
56         new Test005Sub.ParcelDestination.AnotherLevel(); // 111
57         System.out.println(c.value()); // 11
58         System.out.println(d.readLabel()); // Hello World!
59     }
60 }

还有一种放在接口内的接口内部类

放到接口中的任何类都自动地是public和static的,所以将嵌套类放在接口的命名空间内并不违反接口的规则。

 1 interface Test006Sub {
 2
 3     void howdy();
 4
 5     class Test implements Test006Sub {
 6         public void howdy() {
 7             System.out.println("howdy!");
 8         }
 9     }
10 }
11
12 public interface Test006 {
13     public static void main(String[] args) {
14         new Test006Sub.Test().howdy(); // howdy!
15     }
16 }

原文地址:https://www.cnblogs.com/storml/p/8318182.html

时间: 2024-07-30 10:41:08

Java内部类(4):静态内部类&接口内部类的相关文章

Java基础语法<九> 接口与内部类

1 接口  interface implement 接口的所有方法自动地属于public.因此,在接口中声明方法时,不必提供关键字public. 接口可以包含多个方法,接口中可以定义常量.接口中的域将被自动设为public static final. SwingConstants就是只定义了常量,而没有定义方法,任何实现了SwingConstant接口的类都自动地继承了这些常量,并可以在方法中直接地引用一些常量. 1.1 接口的特性 接口不是类,尤其不能使用new运算符实例化一个接口 但是可以声

Java中的嵌套类、内部类、静态内部类

在Java中我们在一个类的内部再定义一个类,如下所示: class OuterClass { ... class NestedClass { ... } } 那么在上面的例子中我们称OuterClass为外围类(enclosing class),里面的那个类称之为嵌套类(Nested Class). 嵌套类可以分为两种,静态的和非静态的,即静态嵌套类和非静态嵌套类.非静态嵌套类又叫做内部类(Inner Class).我们通常所说的静态内部类其实是不严格的,严格的说应该叫做静态嵌套类(Static

Java内部类和内部接口

内部类定义 将一个类的定义放在另一个类的内部. 这就是内部类. 内部类依赖外部类存在. 内部类访问访问权限 public:访问不受限制. protected:访问仅限于包含类或从包含类派生的类型.只有包含该成员的类以及继承的类可以存取. protected internal:访问仅限于当前程序集或从包含类派生的类型. private:访问仅限于包含类型.只有包含该成员的类可以存取. 内部类种类 静态内部类static inner class (also called nested class)

java内部类和静态内部类

看代码理解内部类,局部内部类和静态内部类 内部类代码: public class InnerTest { private static String name; private int age; public InnerTest(String name, int age){ this.name = name; this.age = age; } public void getInstance() { System.out.println("name:" + name.toString(

java 内部类和静态内部类的区别

下面说一说内部类(Inner Class)和静态内部类(Static Nested Class)的区别:定义在一个类内部的类叫内部类,包含内部类的类称为外部类.内部类可以声明public.protected.private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static.final的,也可以实现特定的接口.外部类按常规的类访问方式使用内部 类,唯一的差别是外部类可以访问内部类的所有方法与属性,包括私有方法与属性. (1)创建实例 OutClass.

Java语法糖4:内部类

内部类 最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类. 内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.class.所以内部类的名字完全可以和它的外部类名字相同. 内部类分为四种:成员内部类.局部内部类.匿名内部类.静态内部类.先逐一了解下,再看下使用内部类有什么好处. 成员内部类 成员内部类是最常见的内

Java笔记(10):面向对象--内部类

1.类名作为形式参数 1 /* 2 形式参数: 3 基本类型 4 引用类型 5 类名:(匿名对象的时候其实我们已经讲过了) 需要的是该类的对象 6 抽象类: 7 接口 8 */ 9 class Student { 10 public void study() { 11 System.out.println("Good Good Study,Day Day Up"); 12 } 13 } 14 15 class StudentDemo { 16 public void method(St

java中的四种内部类

java中的内部类分为四个: 成员内部类 静态内部类 局部内部类 匿名内部类 1. 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法,如果被static修饰,就变成静态内部类了. )成员内部类中不能存在static关键字,即,不能声明静态属性.静态方法.静态代码块等.[非静态内部类也可以定义静态成员但需要同时有final关键词修饰,静态方法鉴于无法用final修饰,仍必须是在静态内部类 或者非内部类中定义.] )创建成员内部

【Java编程思想】10.内部类

将一个类的定义放在另一个类的定义内部,这就是内部类. 10.1 创建内部类 内部类的名字是嵌套在外部类里面的 外部类可以有方法,返回一个指向内部类的调用.(外部类中可以调用内部类) 如果在外部类中,希望能在除了静态方法之外的任意位置创建某个内部类对象,那么可以向下面这样指明对象类型. OuterClassName.InnerClassName x = new InnerClassName(); 10.2 链接到外部类 在创建了一个内部类的对象后,内部类与制造它的外围对象(enclosing ob