内部类

基本介绍

  • 概念:在一个类的内部再定义一个完整类
  • 特点:编译之后可生成独立的字节码文件;内部类可以直接访问外部类的私有属性,不破坏封装性
  • 分类:成员内部类;静态内部类;局部内部类;匿名内部类
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. TIDB-DM数据迁移第三部(集群管理)

    1.对现在 dm 集群进行缩容,将 free 状态的 worker 下线. tiup dm display dm-test 查看 free 状态节点 tiup dm scale-in dm 172.1 ...

  2. 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的互转 JAVA

    package com.asiabasehk.cgg.util;   /**火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的互转  * Created by macremote on 1 ...

  3. twenty-three

    Vue(用于构建用户界面的前端框架) Vue框架的特性,主要有 ① 数据驱动试图 ②双向数据绑定 js数据的变化,会被自动渲染到页面上 页面上表单采集的数据发生变化的时候,会被vue自动获取到,并更新 ...

  4. Django ImageField 内置属性height,width和size

    ImageField实例使用height,width和size属性后,若后继操作需重新打开实例,其他模块方法才能调用实例,使用open()方法:>>> from PIL import ...

  5. 在CIMES中调用存储过程

    页面 调用步骤 DataTable dtResult = null; CustomDataAgent TODB_con = DBCenter.Create(AppSetting.Manufacturi ...

  6. 【NPDP专项练习】第六章 市场研究

    第六章 市场研究 1.VOC也叫客户心声,指的是. A 选择一个单一的投资组合项目,并保证所有项目都在策略内 B 利用迭代在专家组中形成共识的决策 C 通过人工"商店"引导潜在客户 ...

  7. 记一个在线工具网站,程序员必备,json格式化、压缩、转义,加解密 编码解码

    简用-在线工具箱-简单易用-工具大全 提供 json格式化,json代码压缩,json校验解析,json数组解析,json转xml,xml转json,json解析,json在线解析,json在线解析及 ...

  8. SourceInsight中inc文件中的符号不能同步问题

    解决方法: 打开Options->Preferences->Syntax Formatting->File Types,然后选中对应的开发语言,如C/C++ Source File, ...

  9. k8s_使用k8s部署博客系统svc、secret、configmap(三)

    service service是抽象Pod对外提供服务的地址,将其固化的作用:屏蔽因pod的创删以及扩缩容带来ip变化.service通过自身定义文件的selector的标签配置匹配到需要提供服务的对 ...

  10. Linux系统修改静态ip

    查看所有网卡 ip信息 ipconfig 修改网卡文件 vim /etc/sysconfig/network-scripts/ifcfg-eno1(网卡名) 新增语句 IPADDR=192.168.1 ...