问: 什么是内部类?

答: 内部类(Inner Class)就是在一个类的内部再定义一个类,与之对应包含内部类的类被称为外部类。

问: 为什么要将一个类定义在另外一个类内部呢?

答: 内部类主要作用如下:

  1. 内部类提供了更好的封装,可以被内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
  2. 内部类的方法可以直接访问外部类的所有数据,包括Private数据。
  3. 内部类所有实现的功能,使用外部类同样可以实现,只是有时候使用内部类更方便。

问: 内部类有几种?

答: 内部类可以分为以下几种:

  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类

成员内部类

静态内部类

  1、静态内部类不能直接访问外部类的 非静态成员,但可以通过 new 外部类().成员 的方式访问。

  2、如果外部类的 静态成员 与内部类的 成员 名称相同,可以通过“外部类.静态成员”的方式访问。

  3、创建静态内部类的对象时,不需要外部类的对象,可以直接创建:内部类 对象名 = new 内部类()

方法内部类

  由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用 访问控制 符和 static 修饰符

示例代码:

public class Outer {
private int a = 11;
static int b = 22;
int c = 33; // 成员内部类
public class Inner {
public void test() {
System.out.println("访问外部类中的a:" + Outer.this.a);
System.out.println("访问外部类中的b:" + Outer.b);
System.out.println("访问外部类中的c:" + c);
}
} // 静态内部类
public static class SInner {
public void test() {
System.out.println("访问外部类中的a:" + new Outer().a);
System.out.println("访问外部类中的a:" + b);
System.out.println("访问外部类中的a:" + new Outer().c); }
} // 成员内部类
public void Show() {
int score = 88;
class SInner {
public int getScore() {
return score + 10;
}
} // 创建方法内部类的对象
SInner si = new SInner();
System.out.println("调用方法内部类的score:" + si.getScore());
} public static void main(String[] args) {
// 创建成员内部类的对象时,需要通过外部类的对象 out.new来创建 内部类对象
Outer out = new Outer();
Inner in = out.new Inner();
in.test(); // 创建静态内部类的对象时,可以直接创建内部类对象
SInner si = new SInner();
si.test(); // 调用方法
out.Show();
}
}

Java 内部类、静态类内部类的更多相关文章

  1. JAVA基础知识|内部类

    一.什么是内部类? 内部类(inner class)是定义在另一个类中的类 为什么使用内部类? 1)内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据 2)内部类可以对同一个包中的其他类隐藏 ...

  2. Java中的内部类怎么用

    一.为什么需要内部类?java内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时 ...

  3. Java 四种内部类

    静态内部类:类中静态类 成员内部类:类中非静态类 局部内部类:类中方法中有名字的类 匿名内部类:类中方法中无名的类 引言:在Java中通常情况下,一个类中会有属性和方法,但还可以包含内部类,内部类可以 ...

  4. 讨论Java中的内部类是什么?

    目录 前言 what is that? 成员内部类 局部内部类 匿名内部类 why use it? how to use? 前言 内部类,讲完前面的特性,今天就讲下内部类这个用的比较多,出现频率挺高的 ...

  5. java 多态和内部类

    接口跟接口之间存在继承关系 一个接口可以继承多个接口 一个非抽象类:必须实现接口中的所有方法 一个抽象类实现接口  可以不实现接口中的方法  但是继承与抽象类的类必须要是实现接口中的方法 多态:一个对 ...

  6. [java] 深入理解内部类: inner-classes

    [java] 深入理解内部类: inner-classes // */ // ]]>   [java] 深入理解内部类: inner-classes Table of Contents 1 简介 ...

  7. Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

    Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...

  8. java基础之 内部类

    Java中的内部类共分为四种: 静态内部类static inner class (also called nested class) 成员内部类member inner class 局部内部类loca ...

  9. java 笔记(2) —— 内部类的作用

    一.内部类简介 个人觉得内部类没多少研究价值,GUI中的事件响应算是非常典型的应用了. Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理.其实,做非GUI编 ...

  10. Java基础(53):内部类(转)

    java中的内部类总结 内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类 如同一个人是由大脑.肢体.器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行 ...

随机推荐

  1. python cPickle和pickle 序列化

    在Python中提供了两个模块:cPickle和pickle来实现序列化,前者是由C语言编写的,效率比后者高很多,一般编写程序的时候,采取的方案是先导入cPickle模块,如果此模块不存在,再导入pi ...

  2. 对 pthread 做的一个简陋封装

    参考自 pthreadcc 库的 ThreadBase 类 用法:继承该类,重写 execute 方法,调用父类的 launchThread 方法启动线程 Thread.h // // Thread. ...

  3. 巨蟒python全栈开发django14:Form组件

    1.form组件初识 2.常用字段测试 3.局部钩子和全局钩子 4.简单看源码

  4. python系列十:python3函数

    #!/usr/bin/python #-*-coding:gbk-*- '''函数的简单规则:    函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ().    任何传入参数和自变量必 ...

  5. python系列二:python3基本数据类型

    #标准数据类型——number(数字)a, b, c = 1, 2.2, "hello"print(a, end = ", ")print(b, end = & ...

  6. 如何生成动态库 .dll 的符号 .lib 文件?

    在知道拥有动态库和头文件的情况下,但没有动态库符号文件的情况下,如何静态链接动态库? 1.使用 Microsoft Visual Studio Tools 命令行命令生成 xxx.def 文件,进而使 ...

  7. [NOIP2018TG]旅行

    [NOIP2018TG]旅行 树很简单,对每个点sort儿子,贪心走就行了 基环树呢? 如果是1e5可能不太好做 但是5000的话枚举断边就可以\(n^2\)了 #include<bits/st ...

  8. Clustered and Secondary Indexes

    Clustered and Secondary Indexes secondary index A type of InnoDB index that represents a subset of t ...

  9. c# 获取网页源代码(支持cookie),最简单代码

    /// /// 获取网页源码 public static string GetHtmls(string url, string referer = "", string cooki ...

  10. C++实现计算器功能(包括计算含未知量的式子),输出后缀表达式

    大概描述        用c++语言在vc中实现部分数学计算功能.其中实现的数学计算功能包括加减乘除运算.开方计算.自然对数运算.以10为底的对数运算.幂计算.正弦余弦计算. 由用户输入要计算的表达式 ...