静态非静态内部类匿名内部类局部内部类

内部类有静态内部类,静态内部类,匿名内部类,局部内部类

(1)非静态内部类

直接在类的内部定义的类就是非静态内部类,如下

public class Test {
    public static void main(String[] args) {
        Outer.Inner c1=new Outer().new Inner();
        c1.Print();
    }
}
class Outer{
    private int temp=10;
    class Inner{
        private int temp=100;
        public void Print() {
            int temp=1000;
            System.out.println("外部类成员变量"+Outer.this.temp);
            System.out.println("内部类成员变量"+this.temp);
            System.out.println("局部变量"+temp);
        }
    }
}

外部类成员变量10
内部类成员变量100
局部变量1000

我们可以看出

  • 内部类对象的创建是建立在外部类对象的基础上的,先有了外部类对象才能有内部类对象
  • 内部对象基于外部对象,内部对象1存在时外部对象一定存在,所以可以直接访问外部类成员,但反之不行,应为外部对象存在时不保证内部类也存在
  • 非静态内部类不能存在静态的方法,属性和初始化块
  • 外部类的静态方法和静态代码块不能访问非静态内部类

(2)静态内部类

带有static的内部类

public class Test {
    public static void main(String[] args) {
        Outer.Inner c1=new Outer.Inner();
        c1.Print();
    }

}
class Outer{
    private int temp=10;
    static class Inner{
        private int temp=100;
        public void Print() {
            int temp=1000;
            System.out.println(this.temp);
            System.out.println(temp);
        }
    }
}

静态内部类有以下特征

  • 静态内部类对象的创建不依赖于外部类对象
  • 根据上面的特点,静态内部类的实例方法不能直接访问外部类的实例方法
  • 静态内部类被看做是外部类的一个静态成员,所以外部类的静态方法可以通过“静态内部类.名字”的方式访问静态内部类的静态成员,通过new静态内部类访问静态内部类的实例

3)匿名内部类

在只用一次的情况下使用匿名内部类,用完就丢弃。主要作用比如,有接口AA,现在想调用实现接口AA的方法

就必须有实现接口的实现类,比如BB,加入这个类只是用一次,我们可以使用匿名内部类来实现

public class Test {
    public static void T(AA a) {
        a.aa();
    }
    public static void main(String[] args) {

        Test.T(new AA(){
            @Override
            public void aa() {
                // TODO Auto-generated method stub
                System.out.println("匿名内部类");
            }
        });
    }
}
interface AA {
    void aa();
}

在上面的代码中,我们在方法调用时才去new一个AA的实现类

(4)局部内部类

方法内部定义的内部类,作用域仅限于方法内部

public class Test {
    public void show() {
        class Inner{
            public void run() {
                System.out.println("局部内部类");
            }
        }
        new Inner().run();
    }
    public static void main(String[] args) {
        new Test().show();
    }
}

原文地址:https://www.cnblogs.com/jchen104/p/10204408.html

时间: 2024-10-10 02:29:41

静态非静态内部类匿名内部类局部内部类的相关文章

Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液.跳动),显然,此处不能单方面用属性或者方法表示一个心脏了,而需要一个类,但是这个类要依赖于人这个类存在(因为心脏不能脱离人体而存活,当然不考虑现今社会的发达科技,只从正常情况下来说),所心脏以需要写在人类的内部.内部类就相当于其中的某个器官之一. 首先看看什么是内部类:在类的内部定义另一个类.没错

java之内部类(InnerClass)----非静态内部类、静态内部类、局部内部类、匿名内部类

提起java内裤类(innerClass)很多人不太熟悉,实际上类似的概念在c++里面也有,那就是嵌套类(Nested Class),关于这俩者的区别,在下文中会有对比.内部类从表面上看,就是在类中定义了一个类(下文可以看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,他的用处可能对于初学者来说并不是那么显著,但是随着对他的深入了解,你会发现java的设计者在内裤类上面的确是用心良苦.学会使用内部类,是掌握java高级编程的一部分,他可以让你更优雅的设计你的程

Java学习(十六)、成员内部类,静态内部类,匿名内部类,局部内部类

定义:将一个类定义在另一个类的内部.内部的类称为内部类; public class Outer{ class inner{ //省略 } } 特点: ①   内部类可以很好的实现隐藏,可以使用protected,private修饰符; ②   内部类可以直接访问外部类的所有成员,包括私有成员; ③   外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才能访问; ④   内部类可以解决一些问题,比如间接的去实现多继承.可以避免修改接口而实现同一个类中两种同名方法的调用; 成员内部类及应用

Java:内部类(静态内部类、成员内部类、局部内部类、匿名内部类)

Java基础_内部类:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类. 内部类的主要作用:使用内部类可以减少命名冲突. 定义位置:一个内部类可以定义在一个类中,也可以在一个方法中,甚至在一个表达式中. 广义上讲,内部类分为四种: 静态内部类(static inner classes) 成员内部类(member inner classes) 局部内部类(local inner classes) 匿名内部类(anonymous inner classes) 1.静态

Java内部类详解--成员内部类,局部内部类,匿名内部类,静态内部类

说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟.下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3811445.html 一

JAVA学习之局部内部类,匿名内部类,静态内部类

分别写了一个匿名内部类和静态内部类的程序,局部内部类感觉就是后两者的一般情况,后两者则是前者的特殊应用. 局部内部类:在一个方法中定义一个类,不可以用public或static进行声明,可以对外部完全隐藏,只有该方法可以调用. 匿名内部类:不用写类的定义头部分,直接写类体,我个人感觉不太好,只有在接口要定义函数时用比较好吧?这种类不能有构造函数,所以它调用超类的构造函数,注意在内部类实现接口时不能有参数. 静态内部类:如果只是单存为了隐藏一个类,而不用内部类去调用外围对象,则可以用这种类,用起来

【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规类功能更加强大. 2.内部类可以对同一个包中的其他类隐藏起来,不过可以通过 OuterClass.InnerClass来引用public声明的内部类. 局部内部类: 1.内部类挪到方法内部,与内部类相比,局部内部类不仅可以访问定义他们的外部类,还可以并且仅可以访问声明为final的局部变量. 2.类

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

java-07 内部类、匿名内部类、局部内部类、lambda

本文主要记录内部类.匿名内部类.局部内部类.lambda表达式的用途和lambda表达式的推导及使用 1.直接内部类 直接内部类可以分为两种: 成员内部类和静态内部类 1.1 成员内部类 成员内部类,就如同成员一样存在一个类中,该内部类可以直接访问外部类成员和方法,但是外部类不能使用内部类方法或者属性. 成员内部类访问外部类属性或方法的方式: 外部类名.this.成员名/方法名 成员内部类声明方式: (假设外部类叫Outer 内部类叫Inner)  Outer.Inner inner = new