匿名内部类、成员类与局部类

今天看代码,看到几个概念:内部类、局部类、成员类、静态成员类、匿名内部类;瞬间有种被搞糊涂了感觉。下面是一个小例子来对它们进行说明:

public class ClassTest{
    public static void main(String[] args) {
        ClassTest son = new ClassTest();

        //测试匿名类
        son.testAnonymous(new AnonymousClass() {
            @Override
            public void test() {
                System.out.println("1 -> " + this.getClass().isMemberClass());
                System.out.println("1 -> " + this.getClass().isAnonymousClass());
                System.out.println("1 -> " + this.getClass().isLocalClass());
                System.out.println("---------------------------------------");
            }
        });

        //测试成员类
        son.testMember();

        //测试静态成员类
        new StaticMemberClass();

        //测试局部类
        class LocalClass{
            public LocalClass(){
                System.out.println("4 -> " + this.getClass().isMemberClass());
                System.out.println("4 -> " + this.getClass().isAnonymousClass());
                System.out.println("4 -> " + this.getClass().isLocalClass());
                System.out.println("---------------------------------------");
            }
        }
        new LocalClass();
    }

    private void testAnonymous(AnonymousClass inner) {
        inner.test();
    }

    private void testMember() {
        new MemberClass();
    }

    /**
     * 接口,用于测试内部类
     * @author xinghzhang
     *
     */
    interface AnonymousClass{
        public void test();
    }

    /**
     * 静态成员类
     * @author xinghzhang
     *
     */
    static class StaticMemberClass{
        public StaticMemberClass() {
            System.out.println("3 -> " + this.getClass().isMemberClass());
            System.out.println("3 -> " + this.getClass().isAnonymousClass());
            System.out.println("3 -> " + this.getClass().isLocalClass());
            System.out.println("---------------------------------------");
        }
    }
    /**
     * 成员类
     * @author xinghzhang
     *
     */
    class MemberClass{
        public MemberClass() {
            System.out.println("2 -> " + this.getClass().isMemberClass());
            System.out.println("2 -> " + this.getClass().isAnonymousClass());
            System.out.println("2 -> " + this.getClass().isLocalClass());
            System.out.println("---------------------------------------");
        }
    }
}

匿名内部类、成员类与局部类

时间: 2024-10-07 14:14:10

匿名内部类、成员类与局部类的相关文章

partial局部类

局部类型允许我们将一个类.接口或结构分成好几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1)类型特别大,不宜放在一个文件中实现. (2)一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起. (3)需要多人合作编写一个类. 局部类型是一个纯语言层的编译处理,不影响任何执行机制--事实上c#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类. (1)一个类型的各个部分上的访问修饰符必须维持一致性. (2)一个类型有一个部分使用了ab

嵌套类 局部类

嵌套类 局部类 <c++ primer 3th> C++嵌套类 1.   嵌套类的名字只在外围类可见. 2.   类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员.嵌套类可以访问外围类的成员(通过对象.指针或者引用). 3.   一个好的嵌套类设计:嵌套类应该设成私有.嵌套类的成员和方法可以设为 public . 4.   嵌套类可以直接访问外围类的静态成员.类型名( typedef ).枚举值. 嵌套类 一个类可以在另一个类中定义,这样的类被称为嵌套类.嵌套类是其

C++ Primer 学习笔记_106_特殊工具与技术 --局部类

特殊工具与技术 --局部类 可以在函数体内部定义类,这样的类称为局部类.一个局部类定义了一个类型,该类型只在定义它的局部作用域中可见.与嵌套类不同,局部类的成员是严格受限的. 局部类的所有成员(包括函数)必须完全定义在类定义体内部,因此,局部类远不如嵌套类有用. 实际上,成员完全定义在类中的要求限制了局部类成员函数的复杂性.局部类中的函数很少超过数行代码,超过的话,阅读者会难以理解代码. 类似地,不允许局部类声明 static 数据成员,没有办法定义它们. 1.局部类不能使用函数作用域中的变量

C++之局部类

局部类,我个人在平时的编程中真的没有用过,其实也不懂,最近想再打牢C++基础重翻了<C++ primer>才看到局部类这一名词,通过"局部"一词联想到局部变 量,能大概猜测局部类是个什么东东.书中定义为:定义在某个函数内部的类,称为局部类.局部类定义的类型只能在定义该类的作用域中可见.局部类的所有成员变 量以及成员函数必须完整定义在类的内部.因为要全部定义在类的内部,好像感觉是内联哈(其实具体实现我也不太清楚),这就导致我们的局部类中的函数定义不 能复杂,不然在函数中定义类

局部类(Local class)

局部类定义: 在函数内声明的类成为局部类(local class) 例如: 局部类的特性: 1)  局部类只能够在该函数内使用(ecclosing function) 2)  局部类只能够在类中定义 3)  局部类不能包含静态数据,但可以包含静态函数 4)  局部类只能够访问封装函数的静态和枚举变量: 5)  局部类可以访问全部类型,变量和函数,以及可以访问相同函数内的局部类:

C#中的局部类

什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在一个文件中实现.(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起.(3) 需要多人合作编写一个类. 想在项目主页的数据库使用的不是局部类型这种 缺点:数据库是由工具生成的,后期的修改不应该影响工具生成的代码,应该改成局部类的形式.

Java 嵌套类(Nested Class):静态嵌套类,内部类,局部类,匿名类

 将一个人比作类,人由大脑.肢体.器官等组成,而嵌套类相当于其中的某个器官,例如心脏:它也有自己的属性和行为(血液.跳动). 嵌套类(Nested Class)的结构: //外部类 class Out { private int age = 12; //嵌套类 class In { public void print() { System.out.println(age); } } } public class Demo { public static void main(String[]

匿名内部类为什么访问外部类局部变量必须是final的?

1.内部类里面使用外部类的局部变量时,其实就是内部类的对象在使用它,内部类对象生命周期中都可能调用它,而内部类试图访问外部方法中的局部变量时,外部方法的局部变量很可能已经不存在了,那么就得延续其生命,拷贝到内部类中,而拷贝会带来不一致性,从而需要使用final声明保证一致性.说白了,内部类会自动拷贝外部变量的引用,为了避免:1. 外部方法修改引用,而导致内部类得到的引用值不一致 2.内部类修改引用,而导致外部方法的参数值在修改前和修改后不一致.于是就用 final 来让该引用不可改变. 2.内部

Java:匿名内部类不能引用外部类中非final类型的变量

在使用Java局部内部类或者匿名内部类时,若该类调用了所在方法的局部变量,则该局部变量必须使用final关键字来修饰,否则将会出现编译错误“Cannot refer to a non-final variable * inside an inner class defined in a different method”. 不知道是不是因为我的编程风格问题,这个错误我经常遇到.而且我在学Java的时候不记得书上有说这个问题.所以这次拿出来百度一下. 简单百度了一下,好像没什么详细的解释,大概是牵