Java面向对象之内部类详解

目录
  • 前言
  • 内部类概述
  • 内部类的分类
    • 成员内部类
    • 局部内部类

前言

在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。本篇博客将总结内部类的使用。

内部类概述

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。

在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。

内部类一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。

内部类的名字不能与包含它的外部类类名相同;

内部类的分类

内部类分为:

成员内部类( static 成员内部类和非 static 成员内部类)

局部内部类(方法内,代码块内,构造器内)

成员内部类

一方面,作为外部类的成员:

  • 调用外部类的结构。
  • 可以被 static 修饰(注意里面只能调用静态方法,静态属性)。
  • 可以被4种不同的权限修饰。

另一方面,作为一个类:

  • 类内可以定义属性、方法、构造器等。
  • 可以被final修饰,表示此类不能被继承。
  • 可以被 abstract 修饰。
class People{
    String race;
    String countries;

    //静态成员内部类
    static class Man{
        String name;
        public Man(){
        }
        public void display(){
            System.out.println("3090yyds");
        }

    }

    // 非静态成员内部类
    class Women{
        String name;
        public Women(){
        }
        public void display(){
            System.out.println("化妆");
        }
    }
}

如何实例化成员内部类的对象

package 内部类;

​​​​​​​public class Demo {
    public static void main(String[] args) {
        //创建Man对象(静态的成员内部类)
        People.Man m = new People.Man();
        m.display();
        //创建Women对象(非静态的成员内部类)
        People p = new People();
        People.Women w = p.new Women();
        w.display();
    }
}

如何在成员内部类成员中区分调用外部类的对象

package 内部类;

public class Demo {
    public static void main(String[] args) {
        //创建Women对象(非静态的成员内部类)
        People p = new People();
        People.Women w = p.new Women();
        w.display("a");
    }
}

class People{
    String name = "niu";
    String countries;
    public void eat(){
        System.out.println("吃饭");
    }
    // 非静态成员内部类
    class Women{
        String name = "aniu";
        public Women(){
        }
        public void eat(){
            System.out.println("吃蔬菜");
        }
        public void display(String name){
            System.out.println("化妆");
            System.out.println(name); //方法的形参
            System.out.println(this.name); //内部类的属性
            System.out.println(People.this.name); //外部类的属性
            this.eat(); //内部类的方法
            People.this.eat(); // 外部类的方法
        }
    }
}

局部内部类

局部内部类可以在方法内,代码块内,构造器内

class Animal{
// 局部内部类
    // 构造器内
    Animal(){
        class Dog{

        }
    }

    // 代码块内
    {
        class Cat{

        }
    }

    // 方法内
    public void method(){
        class Bird{

        }
    }
}

开发中局部内部类的使用

我们在开发中局部内部类使用较多,比如,我们需要一个方法返回实现了某个接口的类的对象,此时方法内自然就需要一个内部类实现接口!

例:

 // 返回一个实现了Comparable接口的类的对象
    public Comparable getComparable(){
        // 创建一个实现了Comparable接口的类 ---局部内部类
        class MyComparable implements Comparable{
            @Override
            public int compareTo(Object o) {
                return 0;
            }
        }
        return new MyComparable();   // 非匿名内部类的匿名对象
    }

或者是这样

 // 返回一个实现了Comparable接口的类的对象
    public Comparable getComparable(){
        return new Comparable() {
            @Override
            public int compareTo(Object o) {
                return 0;
            }
        };  // 匿名内部类的匿名对象

到此这篇关于Java面向对象之内部类详解的文章就介绍到这了,更多相关Java内部类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java的内部类和外部类用法讲解

    目录 一.为何使用内部类 二.内部类与外部类的联系 2.1 内部类是一个相对独立的实体,与外部类不是is-a关系 2.2 内部类可以直接访问外部类的元素,但是外部类不可以直接访问内部类的元素 2.3 外部类可以通过内部类引用间接访问内部类元素 三.创建内部类 3.1 在外部类外面(或外部类main方法)创建内部了对象 3.2 在外部类里面创建内部类 四.内部类的种类: 4.1 成员内部类 4.2 方法内部类 4.3 匿名内部类 4.4 静态内部类 一.为何使用内部类 内部类提供了更好的封装,只有

  • java外部类与内部类简介

     一.内部类 内部类就是将一个类A定义在类B里边,里边的那个类A称为内部类,外边的类B称为外部类 成员内部类定义格式: class 外部类{ class 内部类{ } } class A{ class B{ } } 在描述一个事物是,事物的里边还有另外一个事物就可以用到内部类 访问特点: 1.内部类可以直接访问外部类的成员,包括私有成员. 2.外部类要访问内部类的成员,必须要建立内部类的对象. 创建内部类格式: 外部类.内部类 对象名=new 外部类型().new 内部类型(); 二.匿名内部类

  • Java面向对象之内部类案例讲解

    1. 内部类 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了 1.1 内部类概述 内部类就是在一个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了. 内部类不是在一个java源文件中编写俩个平行的俩个类,而是在一个类的内部再定义另外一个类. 我可以把外边的类称为外部类,在其内部编写的类称为内部类. 内部类分为四种: 成员内部类 静态内部类 局部内部类 匿名内部类 1.2 成员内部类(

  • 浅谈Java面向对象之内部类

    目录 内部类 访问外部对象 访问内部对象 局部内部类 匿名内部类 静态内部类 内部类 内部类是定义在另一个类中的类,例如 TalkingClock 类中内嵌了 TimePrinter 类: class TalkingClock{ private int interval; private boolean beep; public TalkingClock(int interval, boolean beep){} public void start(){} public class TimePr

  • Java内部类详解

    内部类 (一) 概述 把类定义在另一个类的内部,该类就被称为内部类. 举例:把类Inner定义在类Outer中,类Inner就被称为内部类. class Outer { class Inner { } } (二) 内部类的访问规则 ​ A:可以直接访问外部类的成员,包括私有 ​ B:外部类要想访问内部类成员,必须创建对象 (三) 内部类的分类 A:成员内部类 ​ B:局部内部类 ​ C:静态内部类 ​ D:匿名内部类 (1) 成员内部类 成员内部类--就是位于外部类成员位置的类 特点:可以使用外

  • java中的内部类内部接口用法说明

    简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口. 内部类 先讲内部类,内部类就是在类中定义的类.类中的类可以看做是类的一个属性,一个属性可以是static也可以是非static的.而内部类也可以定义在类的方法中,再加上匿名类,总共有5种内部类. 静态内部类 我们在class内部定义一个static的class,如下所示: @Slf4j publi

  • Java面向对象之内部类详解

    目录 前言 内部类概述 内部类的分类 成员内部类 局部内部类 前言 在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类.本篇博客将总结内部类的使用. 内部类概述 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类. 在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类. 内部类一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称.

  • Java 基础之内部类详解及实例

     Java 基础之内部类详解及实例 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液.跳动) 显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类 而心脏又在人体当中,正如同是内部类在外部内当中  实例1:内部类的基本结构 //外部类 class Out { private int age = 12; //内部类 class In { public vo

  • Java线程的全方位详解

    目录 什么是线程? 线程的几种创建方式? 线程的几种状态? 线程相关的核心方法及作用? ❤️‍大家好,我是贾斯汀,今天主要聊一聊关于线程的瓜!❤️‍ 先来看一下线程这张图线程的几种运行状态之间运行流程: 看不懂没关系,慢慢来学习,往下学习来继续了解一下~ 什么是线程? 线程是进程的一部分,是程序执行中的一条执行路线: 进程就是指程序在其自身地址空间的一次执行活动,是程序独立运行的基本单位: 一个进程可以包含多条线程,一个条线程对应一个进程中的一条执行路线. 线程的几种创建方式? 主要由四种方式创

  • Java中的静态内部类详解及代码示例

    1. 什么是静态内部类 在Java中有静态代码块.静态变量.静态方法,当然也有静态类,但Java中的静态类只能是Java的内部类,也称为静态嵌套类.静态内部类的定义如下: public class OuterClass { static class StaticInnerClass { ... } } 在介绍静态内部类之前,首先要弄清楚静态内部类与Java其它内部类的区别. 2. 内部类 什么是内部类?将一个类的定义放在另一个类的内部,就是内部类.Java的内部类主要分为成员内部类.局部内部类.

  • java 内部类的实例详解

    java 内部类的实例详解 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类. public class OuterClass { private String name ; private int age; public String getName() { return name; } p

  • java 单例模式的实例详解

    java 单例模式的实例详解 概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打

  • java中staticclass静态类详解

    一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的.由于静态的内部类在定义.使用的时候会有种种的限制.所以在实际工作中用到的并不多. 在开发过程中,内部类中使用的最多的还是非静态地成员内部类.不过在特定的情况下,静态内部类也能够发挥其独特的作用. 一.静态内部类的使用目的. 在定义内部类的时候,可以在其前面加上一个权限

  • java this引用逃逸详解

    1.什么是This逃逸? 在构造器构造还未彻底完成前(即实例初始化阶段还未完成),将自身this引用向外抛出并被其他线程复制(访问)了该引用,可能会问到该还未被初始化的变量,甚至可能会造成更大严重的问题. 废话不多说,看一下代码 /** * 模拟this逃逸 * @author Lijian * */ public class ThisEscape { //final常量会保证在构造器内完成初始化(但是仅限于未发生this逃逸的情况下,具体可以看多线程对final保证可见性的实现) final

随机推荐