一篇文章带你搞懂【Java】中的内部类(一)

简介: 一篇文章带你搞懂【Java】中的内部类(一)

内部类🐺



1.1内部类概述🐒


内部类:就是在一个类中定义一个类,举例:在一个类A的内部定义一个类B,类B就被称为内部类


内部类定义格式:


class OuterClass {   // 外部类
    // ...
    class NestedClass { // 嵌套类,或称为内部类
        // ...
    }
}


范例:


public class Outer {
           public class Inter {
      }
}


要访问内部类,可以通过创建外部类的对象,然后创建内部类的对象来实现。


内部类的访问特点:


内部类可以直接访问外部类的成员,包括私有

外部类要访问内部类的成员,必须创建对象

代码示例:


public class Outer {
    private int age = 30;
    public class Inner {
        public void show() {
            System.out.println(age);
        }
    }
    public void method() {
        Inner i = new Inner();
        i.show();
    }
}


1.2成员内部类🐷



按照内部类中定义的位置不同,可以分为如下两种形式


在类的成员位置:成员内部类


在类的局部位置:局部内部类


成员内部类,外界创建对象使用:


格式:外部类名.内部类名  对象名 = 外部类对象.内部类对象;
范例: Outer.Innter oi = new Outer().new Innter();


代码示例:


public class Outer {
    private int num = 10;
    /*public class Inner{
        public void show() {
            System.out.println(num);
        }
    }*/
    private class Inner{
        public void show() {
            System.out.println(num);
        }
    }
    public void method(){
        Inner i=new Inner();
        i.show();
    }
}


/*
     测试类
 */
public class InnerDemo {
    public static void main(String[] args) {
        //创建内部类对象,并调用方法
        //格式:外部类名.内部类名  对象名 = 外部类对象.内部类对象;
        //Outer.Innter oi = new Outer().new Innter();
        //oi.show();
        Outer o = new Outer();//创建外部类对象,调用method方法,间接访问成员内部类私有属性
        o.method();
    }
}


不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:


外部类.this.成员变量


外部类.this.成员方法


内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。比如上面的例子,如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。这一点和外部类有一点不一样,外部类只能被public和包访问两种权限修饰。我个人是这么理解的,由于成员内部类看起来像是外部类的一个成员,所以可以像类的成员一样拥有多种权限修饰。


目录
相关文章
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
55 3
|
4月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(完结)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!(完结)
40 0
|
2月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
66 4
|
2月前
|
Java 编译器
【Java】内部类
【Java】内部类
22 0
|
4月前
|
存储 前端开发 JavaScript
【前端学java】一篇文章带你精通java 中的数组(10)
【8月更文挑战第10天】一篇文章带你精通java 中的数组
18 3
【前端学java】一篇文章带你精通java 中的数组(10)
|
4月前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
|
4月前
|
JavaScript 前端开发 Java
java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
【8月更文挑战第11天】java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
33 0
java高质量数据流概念讲解,保证一篇文章帮助你搞懂概念!
|
4月前
|
缓存 前端开发 JavaScript
一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
【8月更文挑战第11天】一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
39 0
一篇文章助你搞懂java中的线程概念!纯干货,快收藏!
|
4月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!
36 0
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
|
4月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
41 5