一起来了解Java的内部类

目录
  • 内部类:
  • 内部类的总结:
    • 一、为什么要用内部类?
    • 二、内部类的好处:
  • 总结

内部类:

其实内部类顾名思义,就是类中类,一个类里面还有一个类。

内部类分为四种:

1.普通内部类

2.静态内部类

3.方法内部类

4.匿名内部类

我们一一去了解一下~~

A、普通内部类:

我们先通过代码去了解一下:

package InternalClass;
/**
 * 内部类
 */
public class Car {
    public int a = 10;
    public int b = 20;
    //外部类的方法
    public void method() {
        System.out.println("我是外部类Car的普通方法!");
        bus b = new bus();     //创建内部类的对象
        b.internalMethod();
    }
    //内部类(在Car类中的bus类)
    public class bus {
        int b = 30;
        //内部类方法
        public void internalMethod() {
            System.out.println("**这是bus内部类的普通方法!");
            System.out.println("**我是内部类,现在在访问外部类Car的a:" + a);
            System.out.println("**我是内部类,现在在访问内部类bus的b:" + this.b);
            System.out.println("**我是内部类,现在在访问外部类bus的b:" + Car.this.b);
            //注意,如果在内部类需要使用外部类的属性,必须通过外部的类去this外部类的属性
        }
    }
	//程序运行入口:
	public static void main(String[] args) {
	    Car car = new Car();   //创建外部类的对象
	    car.method();
	    // 运行上面的代码 会输出 : 我是外部类Car的普通方法!
	   	//运行内部类的方法
	   	//在上面method方法中已经创建了内部类bus的对象b
	   	//这里就是通过使用外部类Car的对象car去new一个内部类对象
	   	bus b = car.new bus();
	   	//通过内部类对象b 去使用方法即可
	    b.internalMethod();
		//输出:
		/*
		**这是bus内部类的普通方法!
		**我是内部类,现在在访问外部类Car的a:10
		**我是内部类,现在在访问内部类bus的b:30
		**我是内部类,现在在访问外部类bus的b:20
*/
   }
}

B、静态内部类:

静态内部类顾名思义也是把内部类用static修饰变为静态的,可以直接用外部类类名去调用,不需要创建对象:

package InternalClass;
public class Person {
    String name = "小王";
    static int age = 20;
    //创建静态内部类
    public static class Student{
        String name = "小红";
        //静态内部类的方法
        public static void study(){
            Person p = new Person(); //创建外部类的对象
            //静态访问非静态需要使用对象去调用
            System.out.println("内部类静态方法访问外部非静态成员:"+p.name);
            System.out.println("内部类静态方法访问外部静态成员:"+Person.age);
            System.out.println("内部类静态方法访问内部非静态成员:"+new Student().name);
        }
    }
    //程序运行入口
    public static void main(String[] args) {
        //静态内使用方法不需要创建对象
        Student.study();
    }
/*
输出:
内部类静态方法访问外部非静态成员:小王
内部类静态方法访问外部静态成员:20
内部类静态方法访问内部非静态成员:小红
*/
}

C、方法内部类:

方法内部类顾名思义也是在外部类的方法体内新建一个类:

package InternalClass;
/**
 * 方法内部类
 */
public class Student {
    //方法
    public void study(){
        int age = 20;
        String name = "小王";
        //在方法内写类:方法内部类
        class child{
            //方法内部类的方法
            public void play(){
                System.out.println("孩子喜欢玩!");
            }
        }
        //在外部类study的方法内创建一个生成内部类child的对象,并使用方法
        child c = new child();
        c.play();
    }
    //程序执行入口
    public static void main(String[] args) {
        Student stu = new Student();
        //这里调用study方法后,在study方法体内创建了child的对象和调用了play的方法
        stu.study();
    }
}
//输出:我叫:小王我今年:20我爱学习
//	   孩子喜欢玩!

内部类的小结(有很多局限性,所以应该注意使用场景):

1.类前不能有访问修饰符

2.只能在此方法内使用

3.无法创造静态信息

4.可以直接访问方法内的局部变量和参数,但是不能修改

5.可以随意的访问外部类的任何信息

D、匿名内部类:

匿名内部类就是没有名字的内部类:

先定义一个接口:

public interface USB {
    void read();
}
package InternalClass;
/**
 * 匿名内部类
 */
public class Child {
    public static void main(String[] args) {
        USB u = new USB() {
            @Override
            public void read() {
                System.out.println("这是匿名内部类,是USB接口没有具名的子类,必须重写 接口做具体实现");
            }
        };
        u.read();
    }
}

匿名内部类需要注意的四点:

1.匿名内部类不能定义任何静态成员、方法

2.匿名内部类中的方法不能是抽象的

3.匿名内部类必须实现接口或抽象父类的所有抽象方法

4.匿名内部类访问的外部类成员变量或成员方法必须用static修饰

内部类的总结:

一、为什么要用内部类?

内部类拥有类的基本特征:可以继承父类,实现接口,在实际问题中我们会遇到一些接口无法解决的问题,此时我们可以使用内部类继承某个具体的或抽象的类,间接解决类无法多继承引起的一系列问题。

二、内部类的好处:

内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体内部类提供了更好的封装,除了该外围类,其他类都不能访问创建内部类对象的时刻并不依赖于外围类对象的创建

总结

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

(0)

相关推荐

  • 详解Java匿名内部类

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

  • Java十分钟精通内部类的使用

    内部类: 其实内部类顾名思义,就是类中类,一个类里面还有一个类. 内部类分为四种: 普通内部类 静态内部类 方法内部类 匿名内部类 我们一一去了解一下~~ A.普通内部类: 我们先通过代码去了解一下: package InternalClass; /** * 内部类 */ public class Car { public int a = 10; public int b = 20; //外部类的方法 public void method() { System.out.println("我是外部

  • 学生视角带你了解Java内部类

    目录 一.内部类介绍 二.成员内部类: 1.非静态内部类 2.静态内部类 二.局部内部类: 2.有名的局部内部类 1.匿名局部内部类(重要) 一.内部类介绍 1.定义:一个类内部又嵌套了一个类,被嵌套的类就是内部类(inner class),嵌套其他类的称为外部类(outer class).内部类是类的五大成员之一(属性. 方法.构造器.代码块.内部类). 分类: 二.成员内部类: 1.非静态内部类 说明:定义在成员位置中(方法或代码块外面),无static修饰. 1.可以直接访问外部类的所有的

  • 解析JavaSe的内部类

    目录 内部类 1.内部类简介 2.非静态内部类 3.静态内部类 4.匿名内部类 总结 内部类 1. 内部类简介 (1) 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类. (2) 内部类成员可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问.但外部类不能访问内部类的实现细节,例如内部类的成员变量. (3) 匿名内部类适合用于创建那些仅需要一次使用的类. (4) 在java中内部类主要分为成员内部类(非静态内部类.静态内

  • Java中的内部类你了解吗

    目录 成员内部类 1.定义 2.成员内部类的使用规则 3.成员内部类对象的创建: 4.内部类与静态域 静态内部类: 1.定义: 2.静态内部类的使用规则: 3.静态内部类对象的创建 成员内部类 VS 静态内部类 方法内部类: 1.定义: 2.方法内部类的使用规则: 3.注意形参的使用 匿名内部类(函数式编程) 总结 成员内部类 1.定义 成员内部类是直接定义在类中,不加任何修饰符的(特指不加static修饰的)的内部类,可以类比着成员变量来理解,如下面这个代码段中的Inn类就是一个成员内部类 p

  • Java的内部类总结

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

  • 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的内部类

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

  • 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

随机推荐