java容易混淆的的内部类相关概念

关于内部类:

作用: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

分类: 成员内部类 静态内部类 方法内部类(即内部类定义在外部类的方法中) 匿名内部类

例如:要调用一般内部类必须先实例化外部类

int a=1;
    int b=3;
    // 内部类Inner,类Inner在类HelloWorld的内部
    public class Inner {
        int a=2;
        // 内部类的方法
        public void show() {
            System.out.println("welcome !"+a+b+Outer.this.a);
            //内外有同名时使用this使用外部类的成员变量
        }
    }

    public static void main(String[] args) {

        // 创建外部类对象
        HelloWorld hello = new HelloWorld();//定义了成员内部类后,
        //必须使用外部类对象来创建内部类对象,而不能直接去 new
        //一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( )
        // 创建内部类对象
        Inner i = hello.new Inner();
        // 调用内部类对象的方法,不能直接使用内部类的方法哦
        i.show();
    }
}

一般类中:

静态成员(方法或属性)可以使用类名直接访问,也可以使用对象名进行访问。

静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员(必须通过对象来调用)。

在普通成员方法中,则可以直接访问同类的非静态变量和静态变量

内部类中:

1如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;  如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

2静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

3创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类(); //外部类

//外部类
public class HelloWorld {

    // 外部类中的静态变量score
    private static int score = 84;
    //外部类的非静态变量
    private int a=1;
    // 创建静态内部类
    public    static      class SInner {
        // 内部类中的变量score
        int score = 91;

        public void show() {
            System.out.println("访问外部类中的score:" +        HelloWorld.score    );
            System.out.println("访问内部类中的score:" + score);
            System.out.println("访问外部类中a:" + new HelloWorld().a);
        }
    }

    // 测试静态内部类
    public static void main(String[] args) {
        System.out.println("访问外部类中的score:" + score+"访问外部类非静态a"+new HelloWorld().a);
        //静态方法中可以直接调用该类的 静态成员 ,但是不能调用非静态成员
        // 直接创建内部类的对象
        SInner si=new SInner();

        // 调用show方法
        si.show();
    }
}
时间: 2024-10-18 23:08:07

java容易混淆的的内部类相关概念的相关文章

Java面向对象程序设计--接口和内部类

1.接口的定义: In the Java programming language, an interface is not a class but a set of requirements for classes that want to conform the interface. 说明: 1) Interface 不是class,虽然interface具有class的一些特点,例如能够继承,能够定义相同类型的变量,而且和C++的abstract class非常像,但Java 的inter

Java语法糖4:内部类

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

java易混淆概念之类变量、成员变量、局部变量

java易混淆概念之类变量.成员变量.局部变量 类变量.成员变量.局部变量 类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰.(static表示“全局的”.“静态的”,用来修饰成员变量和成员方法,或静态代码块(静态代码块独立于类成员,jvm加载类时会执行静态代码块,每个代码块只执行一次,按顺序执行)). 成员变量(也叫“实例变量”.“域”)也是类中独立于方法之外的变量,不过没有static修饰. 局部变量是类的方法中的变量. 看下面的伪代码说明: public class 

Java中为什么要使用内部类

一.前言 关于Java的内部类,要说的东西实在太多,这篇博文中也无法一一具体说到,所以就挑些重点的讲.关于内部类的使用,你可能会疑问,为什么我们要使用内部类?为了回答这个问题,你需要知道一些关于内部类的重点.所以本篇文章首先介绍了一些关于内部类的一些与众不同的地方,后面再解答为什么我们要使用内部类这个问题.各位看官,文章稍微有点长,深吸一口气.来,我们开始吧! 二.内部类定义 内部类定义非常简单,就是把一个类的定义放在另外一个外围类定义的里面.如下面代码所示: class OutterClass

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

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

“全栈2019”Java第九十三章:内部类应用场景(迭代器设计模式)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九十三章:内部类应用场景(迭代器设计模式) 下一章 "全栈2019"Java第九十四章:局部内部类详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习

我的java学习笔记(17)关于内部类(part 2)

1.内部类是一种编译器现象,与虚拟机无关.编译器将会把内部类翻译成用$ 分隔外部类名与内部类的常规文件,而虚拟机则对此一无所知. 2.内部类拥有访问特权,所以与常规类比起来功能更加强大. 3.有时候一个类只在一个方法中使用一次,我们可以定义这个类为局部类. public void start() { class TimePrinter implements ActionListener { public void actionPerformed(ActionEvent event) { Date

java中的包以及内部类的介绍

1:形式参数和返回值的问题(理解)    (1)形式参数:        类名:需要该类的对象        抽象类名:需要该类的子类对象        接口名:需要该接口的实现类对象    (2)返回值类型:        类名:返回的是该类的对象        抽象类名:返回的是该类的子类对象        接口名:返回的是该接口的实现类的对象    (3)链式编程        对象.方法1().方法2().......方法n();                这种用法:其实在方法1()

我的java学习笔记(16)关于内部类(part 1)

1.内部类是定义在另一个类中的类. 原因:a.内部类方法可以访问类定义所在的作用域中的数据,包括私有的数据. b.内部类可以对同一个包中的其他类隐藏起来. c.当想要定义一个回调函数且不想编写大量的代码时,使用匿名内部类比较便捷. 2.内部类皆可以访问自身的数据域,也可以访问创建它的外围类对象的数据域. 3.内部类的对象总有一个隐式引用,它指向了创建它的外部类对象.这个引用在内部类的定义中是不可见的. 4.外围类的设置一般都在内部类的构造器中设置. 5.只用内部类可以是私有类,而常规类只可以具有