Java的内部类总结

目录
  • 前言
  • 一,成员内部类
    • 1,成员内部类的特点
    • 2,成员内部类的实现
    • 3,内部类和外部类的关系
  • 二,静态内部类
    • 1,静态内部类的特点
    • 2,比较成员内部类和静态内部类
    • 3,静态内部类的实现
  • 三,方法内部类
    • 1,方法内部类的特点
    • 2,方法内部类的实现
  • 四, 匿名内部类
    • 1,匿名内部类的特点
    • 2,匿名内部类的实现
  • 总结

前言

最近看了内部类后,总结一下,首先内部类嵌套在其他内部的类,根据出现的位置和关键字,可以分为以下四种类:成员内部类,静态内部类,方法内部类,匿名内部类,接下来就介绍下这四种类,记得耐心看哦

一,成员内部类

1,成员内部类的特点

(1)private不可以用在外部类的声明,但可在内部类声明,成员变量可以是private

(2)内部类,外部类可以相互访问彼此的私有域

A:内部类访问外部类的私有域可以直接访问,因为成员内部类含有隐藏对象

B:外部类访问内部类的私有域通过内部类对象访问

(3)内部类可解决Java中单继承问题

(4)内部类可以对外部隐藏

2,成员内部类的实现

public class Outter {    // 成员变量    private int age = 12;    private String name = "zh";    private static final int A = 20;    //成员内部类    class Inner{        private String a = "hello";        private int age = 20;        public void test(){            System.out.println(a);            // 可以访问外部类的私有域age            System.out.println(Outter.this.age);            //访问自己的age            System.out.println(this.age);            System.out.println(A);        }    }    // 外部类成员方法    public void fun() {        int a = 0;        // 外部类内部创建内部类对象        Inner inner = new Inner();        System.out.println(inner.a);    }}class Test {    public static void main(String[] args) {    //外部类的外部创建内部类对象        Outter.Inner inner = new Outter().new Inner();    }}public class Outter {
    // 成员变量
    private int age = 12;
    private String name = "zh";
    private static final int A = 20;
    //成员内部类
    class Inner{
        private String a = "hello";
        private int age = 20;
        public void test(){
            System.out.println(a);
            // 可以访问外部类的私有域age
            System.out.println(Outter.this.age);
            //访问自己的age
            System.out.println(this.age);
            System.out.println(A);
        }
    }
    // 外部类成员方法
    public void fun() {
        int a = 0;
        // 外部类内部创建内部类对象
        Inner inner = new Inner();
        System.out.println(inner.a);
    }
}
class Test {
    public static void main(String[] args) {
    //外部类的外部创建内部类对象
        Outter.Inner inner = new Outter().new Inner();
    }
}

3,内部类和外部类的关系

A:成员内部类的创建需要依赖于外部类对象

B:内部类和外部类之间相互独立

C:两者的私有属性可以相互访问

D:语法

(1)外部类的内部创建内部类对象

Inner inner = new Inner();

(2)外部类的外部创建内部类对象

Outter.Intter intter = new Outter().new Intter();

E:在内部类的内使用隐藏的this

二,静态内部类

1,静态内部类的特点

(1)定义在外部类的内部使用static修饰,静态内部类无需外部类无需外部类产生对象就可以使用

(2)静态内部类的创建语法

  StaticInnerClass.Inner inner = new StaticInnerClass.Inner();

2,比较成员内部类和静态内部类

(1)成员内部类不能拥有静态域,但可以访问外部的静态域

(2)静态内部类可以拥有成员域,但不能访问外部的成员域

3,静态内部类的实现

public class StaticInnerClass {
    static int age;
    String name;
    //静态内部类--类比--静态变量
    static class Inner{
        private int age;
        public void test(){
            System.out.println(age);
//            System.out.println(name);不能访问外部成员域
        }
    }
    public void fun() {
        Inner inner = new Inner();
    }
}
class Test1 {
    public static void main(String[] args) {
        StaticInnerClass.Inner inner = new StaticInnerClass.Inner();
    }
}

三,方法内部类

1,方法内部类的特点

(1)方法内部类定义在方法内部

(2)对外部完全隐藏,因此不能有任何访问修饰

(3)若要方法的形参只能用,不能改(形参的隐式final声明)

2,方法内部类的实现

//方法内部类
public class FunClass {
    private int age;
    public void fun(int age) {
        class Inner {
            void fun() {
//                System.out.println(age);
            }
        }
        age = 10;
    }
}

四, 匿名内部类

1,匿名内部类的特点

(1)匿名内部类定义在方法内部,类没有名字

(2)必须继承一个抽象类或者实现一个接口

(3)没有构造方法

2,匿名内部类的实现

//实现接口interface IMessage {    void fun();}public class NonNameClass {    public static void main(String[] args) {        //匿名内部类        Thread thread = new Thread(new Runnable() {            @Override            public void run() {                System.out.println("hello A");            }        });        Thread thread1 = new Thread({                System.out.println("hello ");        } );        thread.start();        thread1.start();    }}//实现接口
interface IMessage {
    void fun();
}
public class NonNameClass {
    public static void main(String[] args) {
        //匿名内部类
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello A");
            }
        });
        Thread thread1 = new Thread({
                System.out.println("hello ");
        } );
        thread.start();
        thread1.start();
    }
}

总结

朋友们,看到最后是不是对内部类有了新的认识?

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

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

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

  • 全面探究 Java 内部类

    目录 一. 实例内部类 1. 定义 2. 如何获取实例内部类这个对象的引用 3. 注意事项 二. 静态内部类 1. 定义 2. 如何获取静态内部类这个对象的引用 3. 注意事项 三. 匿名内部类 1. 定义 2. 常见用法 3. 注意事项 内部类(inner class)是定义在另一个类中的类.为什么要使用内部类呢?主要有两个原因:1.内部类可以对同一个包中的其他类隐藏.2.内部类方法可以访问定义这个类的作用域中的数据,包括原本私有的数据. 下面,我就来带领大家去学习Java中比较常见的几种内部

  • 详解Java匿名内部类

    匿名内部类: 先举个例子吧,给大家看一下什么是匿名内部类,Endeavor刚刚接触的时候,觉得哇哦,好奇怪的样子,这也太别扭了吧,不知道大家是什么感觉. 为了进行对比,先举一个正常的类方法调用的例子(大家应该都看的懂吧): 输出结果为: 接下来便开始说正题吧,匿名内部类,通过名字,想必大家就知道什么是匿名内部类了吧, 1.定义:就是没有名字的内部类(内部类之前介绍过了哦). 2.使用内部类有什么好处呢,一句话就概括了:简化书写,至于是怎么简化的,哪里简化了等下再说. 3.先说一下什么时候使用匿名

  • Java 内部类的定义与范例

    目录 一.前言 二.内部类 语法格式: static修饰内部类 内部类未被static修饰时: 内部类被static修饰后 演示操作: 一.前言 前面我们学习了一个小的项目,现在我们来学习新的知识点,关于内部类的描述,其实 顾名思义就是在类的内部有一个类,简称套娃类(个人观点) 二.内部类 一个类定义在另一个在一个类的内部叫内部类. 内部类可以直接访问外部类的私有和非私有成员,而外部类不能直接访问内部类 (包括所有外部类成员) 外部类成员要访问内部类是,必须创建内部类对象. 外部类通过创建对象也

  • JavaSE学习之内部类及常用API

    目录 1.内部类 1.1 内部类概述 1.2 成员内部类 1.3 局部内部类 1.4 匿名内部类 1.5 匿名内部类在开发中的使用 2.常用API 2.1Math 2.2 System 2.3 Object 2.4 Array的排序 1.内部类 1.1 内部类概述 内部类:就是在一个类中定义一个类.例如:在一个类A内部定义一个类B,类B就被称为内部类 格式:public class 类名{修饰符 class 类名{}} 范例 public class Outer{ public class In

  • 新手初学Java的内部类

    目录 Java的内部类 成员内部类 静态内部类 局部内部类 总结 Java的内部类 概念: 内部类就是在一个类的内部定义一个类,比如,A类中定义一个B类,那么B类相对于A类来说就是称为内部类,而A类相对于B类来说就是外部类. 成员内部类 静态内部类 局部内部类 匿名内部类 特点: 内部类编译之后可以生成独立的字节码文件. 内部类可以直接访问外部类的私有成员,而不破坏封装. 内部类可为外部类提供必要的内部功能组件. 外部类要访问内部类的成员,必须要建立内部类的对象 成员内部类 在内的内部定义,与实

  • Java创建内部类对象实例详解

    Java创建内部类对象实例详解 要想使用new生成一个内部类的实例,需要先指向一个外部类的实例,也就是先生成外部类的实例, 因为内部类可以调用外部类的成员,当没有外部类实例的时候也就没有这些成员的内存空间,内部类在实例化的时候,调用外部类的成员就会出错,所以需要使用外部类的实例 + 点 + new 的方式实例化一个新的内部类 class TestInner{ public static void main(String [] args) { Outer outer = new Outer();

  • java 中内部类的实例详解

    java 中内部类的实例详解 一:内部类可直接访问外部类的成员变量,包括外部类私有的成员变量 二:外部类要访问内部类的成员变量,需要建立内部类的对象 class Outer{ int x=110; public void show(){ System.out.println("外部类的x="+x); } public void showInner(){ Inner inner=new Inner(); inner.show(); System.out.println(inner.x);

  • Java局部内部类和匿名内部类定义与用法实例分析

    本文实例讲述了Java局部内部类和匿名内部类.分享给大家供大家参考,具体如下: 一 局部内部类 1 点睛 内部类不仅可以在类中定义,也可以定义在方法体或作用域内.这样的内部类作用范围仅限于方法体或特定的作用域内,因此也称为局部内部类. 2 代码 class InnerClassTest { int score = 95; void inst() { class Inner { void display() { System.out.println("成绩: score = " + sc

  • Java中内部类使用方法实战案例分析

    本文实例讲述了Java中内部类使用方法.分享给大家供大家参考,具体如下: 一 点睛 分三种情况讨论内部类的使用: 1 在外部类内部使用内部类 2 在外部类以外使用非静态内部类 3 在外部类以外使用静态内部类 二 在外部类内部使用内部类 可以直接通过内部类的类名来定义变量,通过new调用内部构造器来创建实例. 不要在外部类的静态成员(包括静态方法和静态初始化块)中使用非静态内部类,因为静态成员不能访问非静态成员. 三 在外部类以外使用非静态内部类 1 点睛 private 修饰的内部类只能在外部类

  • Java局部内部类原理与用法实例分析

    本文实例讲述了Java局部内部类原理与用法.分享给大家供大家参考,具体如下: 一 点睛 如果把一个内部类放在方法中定义,那么这个内部类就是一个局部内部类,局部内部类仅在方法里有效. 由于局部内部类不能在外部类的方法以外的地方使用,因此局部内部类也不能使用控制符合static修饰符修饰. 如果需要用局部内部类定义变量.创建实例或派生子类,那么都只能在局部内部类所在的方法中进行. 二 代码 public class LocalInnerClass { public static void main(

  • Java中内部类的概念与分类详解

    目录 内部类概念 内部类的分类: 成员内部类 普通内部类 静态内部类 局部内部类 总结 只能使用修饰限定符:public 和 默认 来修饰类 内部类概念 在 Java 中,将一个类定义在另一个类的内部,称为内部类 就是在一个类内部进行其他类结构的嵌套操作 内部类也是封装的一种体现 举例: //外部类 public class OutClass { //内部类 class InnerClass{ } } 注意:内部类和外部类共享一个 java源文件,但是经过编译之后,会形成各自单独的字节码文件 内

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

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

  • 举例讲解Java的内部类与类的加载器

    内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加载后,Inner1没有加载,所以这个 静态变量j 无法立即使用,报错 final int z = 0; /*static void say1() { }*/ void say2() { } } //Inner2 在A加载好后就可以使用了 static class Inner2 { int k = 0

  • Java的内部类总结

    目录 前言 一,成员内部类 1,成员内部类的特点 2,成员内部类的实现 3,内部类和外部类的关系 二,静态内部类 1,静态内部类的特点 2,比较成员内部类和静态内部类 3,静态内部类的实现 三,方法内部类 1,方法内部类的特点 2,方法内部类的实现 四, 匿名内部类 1,匿名内部类的特点 2,匿名内部类的实现 总结 前言 最近看了内部类后,总结一下,首先内部类嵌套在其他内部的类,根据出现的位置和关键字,可以分为以下四种类:成员内部类,静态内部类,方法内部类,匿名内部类,接下来就介绍下这四种类,记

随机推荐