1. 内部类的概念

    1. 成员内部类

      1. 访问成员内部类格式:
      2. 案例
    2. 局部内部类
      1. 案例
    3. 静态内部类
      1. 访问格式:
      2. 案例
    4. 匿名内部类
      1. 格式:
      2. 案例

内部类的概念

将类定义在类的内部,那么该类就成为内部类

注意: 内部类是一个相对的概念,如果A类中有一个B类,那么A类相对于B类来说就是外部类,那么B类相对于A类来说就是内部类

内部的分类

1.成员内部类

2.局部内部类

3.静态内部类

4.匿名内部类

内部类的特点:

1.内部类可以直接访问外部类的所有成员

2.外部类如果需要访问内部类成员,必须创建内部类对象

3.内部类如果编译后生成2个字节码文件,格式如下

外部类\(内部类.class
OuterClass\)InnerClass.class

4.要访问内部类的成员非常麻烦,而且造成程序耦合性增高,可读性降低,所以内部类要慎用

成员内部类

内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。

比如下面的例子,如果成员内部类OuterClass3用private修饰,则只能在外部类的内部访问。如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。这一点和外部类有一点不一样。

外部类只能被public和包访问两种权限修饰。我个人是这么理解的,由于成员内部类看起来像是外部类的一个成员,所以可以像类的成员一样拥有多种权限修饰。

访问成员内部类格式:

外部类类名.内部类类名 对象名 = 外部类对象.内部类对象

当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:

  • 外部类.this.成员变量
  • 外部类.this.成员方法

案例

public class InnerClassDemo03 {
public static void main(String[] args) {
OuterClass3.InnerClass oi = new OuterClass3().new InnerClass();
oi.show(); oi.setNum2(100);
System.out.println(oi.getNum2());
}
}
class OuterClass3{
// 成员位置
private int num = 10; class InnerClass{ private int num2 = 20; public void show() {
System.out.println(num);
System.out.println(num2);
} public void setNum2(int num2) {
this.num2 = num2;
} public int getNum2() {
return this.num2;
}
} }

局部内部类

局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。

  • 注意,局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。

案例

class People{
public People() { }
} class Man{
public Man(){ } public People getWoman(){
class Woman extends People{ //局部内部类
int age =0;
}
return new Woman();
}
}

静态内部类

成员内部类也可以使用static修饰

而且成员内部类还可以使用private的修饰

访问格式:

外部类类名.内部类类名 对象名 = new 外部类类名.内部类类名();

静态内部类主要成员是静态成员,可以方便调用,同时提高类的安全性

静态内部类可以有静态成员和非静态成员

案例

public class InnerClassDemo05 {
public static void main(String[] args) {
// OuterClass5.InnerClass oi = new OuterClass5.InnerClass();
// System.out.println(oi.num);
// oi.show();
// oi.show2();
System.out.println(OuterClass5.InnerClass.num2);
OuterClass5.InnerClass.show2();
}
} class OuterClass5{
private int num = 5;
public static int num2 = 10; public static class InnerClass{
public int num = 10;
public static int num2 = 20; public void show() {
System.out.println("InnerClass.show()");
} public static void show2() {
System.out.println("InnerClass.show2()");
}
} public static void method() {
InnerClass innerClass = new InnerClass();
// System.out.println(num);
}
}

匿名内部类

概念:本质就是一个子类匿名对象

特点:

1.可能是一个子类、普通类、抽象类、接口

2.没有名字的子类

3.是一个对象

格式:

new 类或者父类/抽象类/接口(){
//重写方法;
}
  • 匿名内部类的本质一个继承(父类)或者实现(接口)的子类匿名对象

案例

经典面试题

public class InnerClassDemo08 {
public static void main(String[] args) {
OuterClass8.Inner oi = new OuterClass8().new Inner();
oi.show();
}
}
class Fu{ public int num = 40; public void show() {
int num = 50;
System.out.println(num);
}
}
class OuterClass8{
public int num = 10; class Inner extends Fu{
public int num = 20; public void show() {
int num = 30;
// 输出30
System.out.println(num);
// 输出20
System.out.println(this.num);
// 输出40
System.out.println(super.num);
// 输出50
super.show();
// 输出10
System.out.println(OuterClass8.this.num);
}
}
}

java个内部类的总结的更多相关文章

  1. Java学习--内部类(一)

    Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...

  2. Java的内部类

    Java的内部类 首先我们来了解一下什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类可以是静态static的,也可用public,default,protected和private修饰 ...

  3. java使用内部类的好处及其初始化

    java使用内部类的原因 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响          java内部类初始化 ForeCatal ...

  4. JAVA基础——内部类详解

    JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 ...

  5. JAVA面向对象-----内部类的概述

    JAVA面向对象-–内部类的概述s 将类定义在另一个类的内部则成为内部类.其实就是类定义的位置发生了变化. 在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为 ...

  6. Java的内部类真的那么难以理解?

    01 前言 昨天晚上,我把车停好以后就回家了.回家后才发现手机落在车里面了,但外面太冷,冷到骨头都能感受到寒意——实在是不想返回一趟去取了(小区的安保还不错,不用担心被砸车玻璃),于是打定主意过几个小 ...

  7. 第30节:Java基础-内部类

    内部类 // 外部类 class Demo{ private int num = 3; // 定义内部类 class Int{ void show(){ System.out.println(&quo ...

  8. 【Java】 内部类

    [Java]内部类 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 使用内部类的的原因主要有三点: 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据. 内部类可以对同一个包中的 ...

  9. java中内部类的积累

    放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围类的所有元素的访 ...

  10. Java 基础 内部类

    Java 基础 内部类 内部类(嵌套类) nested class 目的为外围类enclosing class提供服务. 四种: 静态成员类 static member class 非静态成员类 no ...

随机推荐

  1. [LeetCode] N-ary Tree Preorder Traversal N叉树的前序遍历

    Given an n-ary tree, return the preorder traversal of its nodes' values. For example, given a 3-ary  ...

  2. python +selenium +chrome/firefox 环境配置

    http://ftp.mozilla.org/pub/firefox/releases/ 各firefox版本下载地址 http://ftp.mozilla.org/pub/firefox/relea ...

  3. jquery $.ajax({});参数详解

    用到过的: type:请求方式,默认 GET: url:请求路径: data:请求参数,类型是String:JSON.stringify({"name":tom,"age ...

  4. css学习_css3过渡

    1.css3过渡 注意:记住多属性设置的方式:若把过渡写在了hover里面的话鼠标移走时不会有过渡效果!:不同属性同时变时用  all 就可以实现了. 2.css3  transform属性 1.移动 ...

  5. ping vs telnet, what is the difference between them and when to use which?

    Ping is an ICMP protocol. Basically any system with TCP/IP could respond to ICMP calls if they were ...

  6. 长时间关机测试脚本.VBS

    Sub Main Dim cnt Dim delay Dim time Dim atttime atttime = 20 delay = 3000 time = 50 cnt_time=3 crt.s ...

  7. c++ 第一次实验

    实验内容: 2-28:实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete) S(ort) Q(uit),Selete one:”提示用户输入.A表示增加,D表示删除, S表示排序 ...

  8. xcode10对应的xcode command line tool编译的坑

    众所周知,xcode10新增的编译系统new build system会不支持一些老项目的编译,一般的做法是在Xcode编译配置Xcode->File->Project Settings/ ...

  9. mac环境使用ATS验证

    https://blog.csdn.net/skylin19840101/article/details/53760146 参考的这篇文章,用 /usr/bin/nscurl --ats-diagno ...

  10. principal(括号匹配+多组查询)

    题目传送门: 把所有括号相匹配的段直接预处理出来就行了 #include <bits/stdc++.h> using namespace std; #define ll long long ...