JavaSE——面向对象高级三(1/5)-内部类概述、成员内部类、静态内部类、局部内部类

简介: JavaSE——面向对象高级三(1/5)-内部类概述、成员内部类、静态内部类、局部内部类

内部类概述、成员内部类【了解】

内部类

  • 是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类
  • 场景:当一个类的内部,包含了一个完整的事务,且这个事务没有必要单独设计时,就可以把这个事务设计成内部类。
public class Car{
    //内部类
    public class Engine{
    }
}

内部类有四种形式

  • 成员内部类
  • 静态内部类
  • 局部内部类
  • 匿名内部类

成员内部类的具体形式:

public class Outer{
    //成员内部类
    public class Inner{
        //也可以和外部类一样定义变量
        private String name;
        public static String schoolName; //JDK 16之前,成员内部类是不支持定义静态成员的。
        
        public void test(){
        }
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name = name;
        }
    }
}

成员内部类的调用方式:

public class Test{
    public static void main(String[] args){
        Outer.Inner in = new Outer().new Inner(); //需要new两次
    }
}

注意:在内部类的成员方法中可以直接访问外部类的成员。

看以下情形:

public class Outer{
    private int age = 99;
    //成员内部类
    public class Inner{
        //也可以和外部类一样定义变量
        private String name;
        private int age = 88;
        public static String schoolName; //JDK 16之前,成员内部类是不支持定义静态成员的。
        
        public void test(){
            int age = 66;
            //此处我想要分别打印出66、88和99
            //应该如何调用呢?
        }
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name = name;
        }
    }
}

如代码所示,在外部类的变量、在内部类的变量和在内部类方法内的变量,我们分别把它输出出来:

public class Outer{
    private int age = 99;
    //成员内部类
    public class Inner{
        //也可以和外部类一样定义变量
        private String name;
        private int age = 88;
        public static String schoolName; //JDK 16之前,成员内部类是不支持定义静态成员的。
        
        public void test(){
            int age = 66;
            System.out.println(age); // 66
            System.out.println(this.age); // 88
            System.out.println(Outer.this.age); // 99
        }
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name = name;
        }
    }
}

成员内部类中访问其他成员的特点

  1. 和前面学过的实例方法一样,成员内部类的实例方法中,同样可以直接访问外部类的实例成员、静态成员。
  2. 可以在成员内部类的实例方法中,拿到当前外部类对象,格式是:外部类名.this。

静态内部类【了解】

什么是静态内部类

  • 有static修饰的内部类,属于外部类自己持有。
public class Outer{
    //静态内部类
    public static class Inner{
    }
}

创建对象的格式

外部类名.内部类名 对象名 = new 外部类.内部类(...);

Outer.Inner in = new Outer.inner();

静态内部类中访问外部类成员的特点:

  • 可以直接访问外部类的静态成员,不可以直接访问外部类的实例成员。

与静态方法一样的,在静态内部类中,它只能访问外部类的静态成员,但是它不能直接去访问外部类的实例成员。

局部内部类【了解】

  • 局部内部类是定义在方法中、代码块中、构造器等执行体中。
public class Test{
    public static void main(String[] args){
    
    }
    public static void go(){
        class A{}
        abstract class B{}
        interface C{]
    }
}

这里的局部内部类看看就好,本篇了解一些概念性的东西即可,下一篇的匿名内部类是我们学习的重点。


END



目录
相关文章
|
5月前
|
Java
【Java基础】 内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
Java内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
35 0
|
6月前
|
Java
30、根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
30、根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
53 1
|
6月前
|
Java
JAVA基础--内部类和静态内部类、单例模式---静态内部类剖析
JAVA--内部类和静态内部类、单例模式---静态内部类剖析
104 9
内部类的概念与分类(成员内部类,局部内部类,匿名内部类)
内部类,就是一个类内部包含另一个类,即一个事物的内部包含着另一个事物。例如:身体和心脏 、汽车与发动机之间的关系。 可以看见在out下的内部类文件命名规则是 外部类$内部类.class类名称 对象名 = new 类名称();外部类名称.内部类名称 对象名 = new 外部类名称().new 外部类名称(); 把这条公式插入到demo07InnerClass 中 使用heart.调用内部类方法 如果一个类是定义在一个方法内部的,那么这是一个局部内
39 2
成员内部类、静态内部类、局部内部类、匿名内部类的精髓与应用
成员内部类、静态内部类、局部内部类、匿名内部类的精髓与应用
112 0
静态内部类,实例内部类
我们创建了静态内部类,那么我们怎么能获取静态内部类对象呢? 这里我们知道静态变量是不依赖于对象的,所以不用先new一个Outclass1对象(讲到实例内部类会用),可以直接new OutClass.InnerClass()。
71 0
|
设计模式 Java
3.2 内部类的类型:静态内部类
3.2 内部类的类型:静态内部类
69 0
|
Java
5.1 内部类与外部类的关系:内部类的实例化方式
5.1 内部类与外部类的关系:内部类的实例化方式
203 0
|
Java
java中的四种内部类详解(成员类内部类,静态内部类,局部内部类,匿名内部类)
java中的四种内部类详解(成员类内部类,静态内部类,局部内部类,匿名内部类)
141 0
|
Java
第30篇:根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
🌻 嵌套类、内部类、局部类等是 Java 面向对象中的难点,但好好研究清楚感觉也不是特别难。博主再次学习这部分内容,以次巩固知识。 🌻 博主其他介绍相关内容的文章:嵌套类、内部类、静态嵌套类... 🌻 博主以官方教程为基础开始学习,其中的概念都是以官方教程为主,这样学习起来比较放心。
149 0
第30篇:根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...