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



目录
相关文章
|
2月前
|
Java C++
类与对象(三)--内部类、匿名对象
类与对象(三)--内部类、匿名对象
类与对象(三)--内部类、匿名对象
|
1月前
|
Java
【Java基础】 内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
Java内部类 (成员内部类、局部内部类、静态内部类、匿名内部类)
15 0
|
2月前
|
Java
30、根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
30、根据官方教程详解嵌套类、内部类、静态嵌套类、局部类、匿名类 ...
36 1
|
2月前
|
Java
JAVA基础--内部类和静态内部类、单例模式---静态内部类剖析
JAVA--内部类和静态内部类、单例模式---静态内部类剖析
|
8月前
内部类的概念与分类(成员内部类,局部内部类,匿名内部类)
内部类,就是一个类内部包含另一个类,即一个事物的内部包含着另一个事物。例如:身体和心脏 、汽车与发动机之间的关系。 可以看见在out下的内部类文件命名规则是 外部类$内部类.class类名称 对象名 = new 类名称();外部类名称.内部类名称 对象名 = new 外部类名称().new 外部类名称(); 把这条公式插入到demo07InnerClass 中 使用heart.调用内部类方法 如果一个类是定义在一个方法内部的,那么这是一个局部内
22 2
|
8月前
|
Java
成员内部类、静态内部类、局部内部类、匿名内部类的精髓与应用
成员内部类、静态内部类、局部内部类、匿名内部类的精髓与应用
|
9月前
|
Java
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
【JavaSE专栏65】内部类的使用,定义在其他类内部的类
|
11月前
|
Java 数据安全/隐私保护
1.2 什么是Java内部类:内部类的特点
1.2 什么是Java内部类:内部类的特点
61 0
|
Java
java中的四种内部类详解(成员类内部类,静态内部类,局部内部类,匿名内部类)
java中的四种内部类详解(成员类内部类,静态内部类,局部内部类,匿名内部类)
116 0
|
Java
java学习第十三天笔记-面向对象247-继承中成员方法和成员变量的特点-成员方法的访问特点
java学习第十三天笔记-面向对象247-继承中成员方法和成员变量的特点-成员方法的访问特点
71 0
java学习第十三天笔记-面向对象247-继承中成员方法和成员变量的特点-成员方法的访问特点