内部类

基本介绍

  • 概念:在一个类的内部再定义一个完整类
  • 特点:编译之后可生成独立的字节码文件;内部类可以直接访问外部类的私有属性,不破坏封装性
  • 分类:成员内部类;静态内部类;局部内部类;匿名内部类
package Inten;
//头部
public class What {
//内部类
class Hello{ }
}

内部类分类

成员内部类

基本介绍

  • 在类的内部定义,与实例变量和实例方法同级别的类
  • 外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
  • 当外部类和内部类存在重名属性时,会优先访问内部类的属性
  • 成员内部类不能定义静态成员

运用实例

ChenYuan.java

package Inten;
//外部类
public class ChengYuan {
//实例变量
private String name="李同洲";
private int age=18;
//内部类
class InterC{
private String address="江西";
private int tele=109; private String name="Li"; //private static String contry="中国";static报错 //方法
public void show(){
//打印外部类的属性(实例变量),当内部属性和外部属性的名字相同时,如果不使用ChengYuan.this则表示的内部属性
System.out.println(ChengYuan.this.name);
System.out.println(ChengYuan.this.age); //打印内部类的属性
System.out.println(address);//可以使用this.name
//System.out.println(this.address);
System.out.println(tele);
}
}
}

TestCheng.java

public class TestCheng {
public static void main(String[] args) {
//1.创建外部类对象
ChengYuan chengyuan = new ChengYuan();
//2.创建内部类对象
ChengYuan.InterC interC=chengyuan.new InterC(); //一步到位
ChengYuan.InterC interC2=new ChengYuan().new InterC(); interC.show();
}
}

静态内部类

基本介绍

  • 不依赖外部类对象,可直接创建或者通过类名访问,可声明静态成员

运用实例

JingTai.java

package Inten;
//外部类
public class JingTai {
private String name="李同洲";
private int age=18;
//静态内部类
static class InterJ {
private String address = "江西";
private int tele = 109; private static String contry="中国"; public void show(){
//调用外部类的属性值
//1.先创建外部类对象
JingTai jingTai=new JingTai(); //2.调用外部类对象的属性
System.out.println(jingTai.name);
System.out.println(jingTai.age); //3.调用内部类对象的属性
System.out.println(address);
System.out.println(tele); //4.调用内部类的静态属性
System.out.println(InterJ.contry);
}
}
}

TestJing.java

public class TestJing {
public static void main(String[] args) {
JingTai.InterJ interJ=new JingTai.InterJ(); interJ.show();
}
}

局部内部类

基本介绍

  • 定义在外部方法中,作用范围和创建对象仅限于当前方法中
  • 局部内部类访问当前方法的局部变量时,因无法保障变量的声明周期与自身相同,变量必须修饰为final
  • 限制类的使用范围

运用实例

JuBu.java

public class JuBu {
private String name="李同洲";
private int age=18; public void show(){
//定义局部变量
String address="江西"; //局部内部类:不能加任何访问修饰符
class JuBuJ{
//局部内部类属性
private int phone=123456;
private String emil="li@tongzhou"; public void show2(){
//访问外部类属性
System.out.println(name);
System.out.println(age); //访问内部类属性
System.out.println(phone);
System.out.println(emil); //访问局部变量;jak1.7要求(变量必须时常量final);jdk1.8则会自动添加final
System.out.println(address);
}
}
//创建局部内部类对象
JuBuJ juBuJ=new JuBuJ();
juBuJ.show2();
}
}

TestJu.java

public class TestJu {
public static void main(String[] args) {
JuBu juBu=new JuBu();
juBu.show();
}
}

匿名内部类

基本介绍

  • 没有类名的局部内部类(一切特征与局部内部类相同)
  • 必须继承一个父类或者实现一个接口
  • 定义类、实现类、创建对象的语法合并,只能创建一个该类的对象
  • 优点:减少代码量
  • 缺点:可读性较差

运用实例

Usb.java

package Inten;
//接口
public interface Usb {
//服务
void service();
}

NiMing.java

package Inten;

public class NiMing implements Usb{

    @Override
public void service() {
System.out.println("连接成功");
}
}

TestNi.java

package Inten;

public class TestNi {
public static void main(String[] args) {
/*//创建接口类型的变量
Usb usb=new NiMing();
usb.service(); //局部内部类
class fan implements Usb{ @Override
public void service() {
System.out.println("开始工作");
}
}
//使用局部内部类创建对象
Usb usb1=new fan();
usb1.service();*/ //使用匿名内部类优化(相当于创建了一个局部内部类)
Usb usb=new Usb() {
@Override
public void service() {
System.out.println("开始工作");
}
};
usb.service();
}
}

内部类(Java)的更多相关文章

  1. java基础(十三)-----详解内部类——Java高级开发必须懂的

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能 ...

  2. [内部类] java笔记之内部类

    1.内部类的分类 2.成员内部类的定义格式 3.一旦使用了内部类,那么生成的class文件长啥样? 其中Body是外部类,Heart是Body的内部类,所以中间有个美元符号$,所以给类进行命名时,不要 ...

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

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

  4. “内部类” 大总结(Java)

    (本文整理自很久以前收集的资料(我只是做了排版修改),作者小明,链接地址没有找到,总之感谢,小明) (后面也对"静态内部类"专门做了补充) 内部类的位置: 内部类可以作用在方法里以 ...

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

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

  6. 【Java_基础】Java内部类详解

    1.四种内部类 java中的四种内部类:成员内部类.静态内部类.局部内部类和匿名内部类.其中匿名内部类用到的最多. 1.1.成员内部类 若一个类定义在另一个类的内部作为实例成员,我们把这个作为实例成员 ...

  7. 死磕Java内部类

    Java内部类,相信大家都用过,但是多数同学可能对它了解的并不深入,只是靠记忆来完成日常工作,却不能融会贯通,遇到奇葩问题更是难以有思路去解决.这篇文章带大家一起死磕Java内部类的方方面面. 友情提 ...

  8. java内部类的本质

    连接与通信,作为桥接中间件存在. 内部类和主体类可以无障碍通信: 1.通过继承连接实现: 2.通过接口连接通信: 形式: 1.命名空间: 2.运行上下文: 其它: 信息隐藏是次要功能. 内部类 Jav ...

  9. Java基础知识笔记第七章:内部类和异常类

    内部类 /* *Java支持在一个类中定义另一个类,这样的类称为内部类,而包含内部类的类称为内部类的外嵌类 */ 重要关系: /* *1.内部类的外嵌类在内部类中仍然有效,内部类的方法也可以外嵌类的方 ...

  10. 基础篇:JAVA内部类的使用介绍

    目录 1 四种内部类 2 内部类的使用场景和优点 3 成员内部类 4 成员内部类的访问范围详解 5 静态内部类 6 局部内部类 7 匿名内部类 欢迎指正文中错误 关注公众号,一起交流 参考文章 1 四 ...

随机推荐

  1. php json_encode 斜杠 反斜杠 转义处理

    $data = str_replace("\\\\n", "\\n", \jsonEncode($data)); // \\n转为\n $data = str_ ...

  2. 通过Container制作Image

    1.拉取tomcat镜像 docker pull tomcat docker images 2.根据tomcat镜像创建一个tomcat container docker run -d -it --n ...

  3. 2021 icpc 沈阳 I 【分式线性变换的保交比性】

    分式线性变换的保交比性 对于分式线性变换,具有保交比性 应用 在复数域下,存在分式线性变换,给定三个输入和输出,再给定第四个输入,求其在这个分式线性变换下的输出. https://codeforces ...

  4. Flink 消费RabbitMQ 和 Kafka

    在消息RabbitMQ时,我们关心的一个问题是手动ack还是自动ack,如果是自动ack就怕出现丢消息的情况 Flink以RabbitMQ作为Source,是怎么保证消息唯一性的呢,是怎么保证ack的 ...

  5. 爬qqhentai

    import requestsfrom bs4 import BeautifulSoupimport timeimport reimport osimport randomagentlist = [& ...

  6. cublas fp16

    编译选项: nvcc 4.cpp -o test_gemm  -lcudart -lcuda -lcublas -std=c++11 #include <sys/time.h> #incl ...

  7. json extionsion

    using System.Collections.Generic;using Newtonsoft.Json;using Newtonsoft.Json.Converters; namespace D ...

  8. 39.Feign

    Java方式配置 /**局部**/ @FeignClient(value = "user-center", /*修改(user-center)feign的日志级别*/ config ...

  9. 当FTP不能满足大文件、海量文件传输时,有没有好的替代方案?

    很多企业存在大文件.海量文件的传输需求,如涉及到图像数据采集和回传.海量用户数据收集和同步等业务,一般情况,企业还是会采用传统的FTP传输,或者以此为基础,使用脚本或结合其他办公工具来解决传输需求. ...

  10. vue项目element-ui组件打包后组件显示方框解决方式

    在 utils.js文件添加一句代码 publicPath:'../../',