当前位置: 首页 > news >正文

Day32内部类

内部类

  1. 内部类就是在一个类中定义一个类,(在A类中定义一个B类,B类就被称为内部类)

    格式:public class 类名{ 修饰符 class 类名{} } 如:public class Outer{ public class Inner {} }

    //内部类可以访问外部类的成员,包括私有。 //外部类要访问内部类的成员,必须创建对象。

public class Outer{private int num = 10;public class Inner{public void show(){System.out.pirntln(num);//内部类可以直接访问外部类的成员,包括私有}}public void method(){Inner i = new Inner();//外部类想要访问内部类需要创建对象i.show();}
}
  1. 按照内部类在类中定义的位置不同,可以分为两种:在类的成员位置被称为成员内部类;在类的局部位置(方法位置)被称为局部内部类。

    //成员内部类创建对象格式:外部类名 . 内部类名 对象名 = 外部类对象 . 内部类对象;(Outer.Inner oi = new Outer().new Inner();)

public class Outer{private int num = 10;private class Inner{public void show(){System.out.println(num);}}public void method(){Inner i = new Inner();//在method的方法中创建Inner内部类的对象并调用方法i.show();}
}
​
//测试类
public class InnerDemo{public static void main(String[] args){Outer o = new Outer();//在测试方法中创建外部类对象o.method();         //外部类对象调用method方法间接调用内部类对象和方法}
}

//局部内部类是在方法中定义的类,所以外界无法直接使用,需要在方法内部创建对象并使用该类可以直接访问外部类成员,也可以访问方法内的局部变量。

public class Outer {private int num = 10;public void method(){int num2 = 20;//在方法中定义一个成员变量class Inner{public void show(){System.out.println(num);System.out.println(num2);}}Inner i = new Inner();//在方法中定义对象并调用i.show();}
}
​
//测试类
public class OuterDemo{public static void main(String[] args){Outer o = new Outer();//定义外部类对象o.method();//外部类对象调用方法,间间访问到局部内部类的对象i调用的show方法}
}
  1. 匿名内部类(局部内部类的一种)

    匿名内部类本质是一个继承了该类或者实现了该类接口的子类匿名对象。

    格式:new 类名或者接口名(){ 重写方法; }; 如:new Inter(){ public void show(){} }; //最后分号不要缺少

//定义一个接口
public interface Inter {void show();
}
​
//在外部类中写局部内部类,然后写匿名内部类
public class Outer{public void method(){new Inter(){@Overridepublic void show(){System.out.println("匿名内部类");}};//现在本质是一个对象new Inter(){@Overridepublic void show(){System.out.println("匿名内部类");}}.show();//匿名内部类对象调用show方法,可以多次调用//因为定义的是个接口的实现类对象Inter i = new Inter(){@Overridepublic void show(){System.out.println("匿名内部类");}};i.show();}
}
​
//定义一个测试类
public class OuterDemo{public static void main(String[] args){Outer o = new Outer();o.method();}
}
//创建跳高接口
public interface Jumpping{void jump();
}
​
//接口的操作类,里面有一个方法方法的参数是接口名
public class JumppingOperator{public void method(Jumpping j){j.jump();}
}
​
//测试类
public class JumppingDemo{public static void main(String[] args){//需求:创建接口操作类的对象,调用method方法JumppingOperator jo = new Jumpping Operator();Jumpping j = new Cat();//需要先创建实现类,然后在测试类中创建实现类对象jo.method(j);//调的是接口名,因为接口不能直接引用,因此需要定义一个实现类对象//如果不想创建实现类再定义对象,可以使用匿名内部类(本质是一个对象)jo.method(new Jumpping(){@Overridepublic void jump(){System.out.println("猫可以跳高了");   }});}
}
http://www.lryc.cn/news/63050.html

相关文章:

  • 用户画像系列——HBase 在画像标签过期策略中的应用
  • 时下热门话题:ChatGPT能否取代人类?
  • 每日刷题记录(十七)
  • 开放原子训练营(第三季)RT-Thread Nano学习营一探究竟
  • 数据库系统概论(二)关系数据库,SQL概述和数据库安全性
  • 【VM服务管家】VM4.x算子SDK开发_3.1 环境配置类
  • Java核心书籍1
  • crontab详细用法 定时任务
  • 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局
  • 开心档之MySQL 创建数据类型
  • 【C++ Primer(第5版) 课后习题题目及答案 第一章】
  • 【英语】100个句子记完7000个托福单词
  • 六、CANdelaStudio入门-通信参数编辑
  • 【致敬未来的攻城狮计划】— 连续打卡第十三天:FSP固件库开发启动文件详解
  • Java中mybatis是否支持延迟加载?延迟加载的原理是什么?
  • 真题详解(磁盘)-软件设计(五十八)
  • MATLAB连续时间信号的实现和时域基本运算(八)
  • MongoDB 聚合管道中使用字符串表达式运算符
  • 用Python分析周杰伦歌曲并进行数据可视化
  • 培训技能 GET
  • 数据库安全性案例分享
  • 2023,你了解Kafka吗?深入详解
  • 奇舞周刊第 491 期 初探 Web 客户端追踪技术
  • 【Java】什么是SOA架构?与微服务有什么关系?
  • 【中间件】kafka
  • Html5版音乐游戏制作及分享(H5音乐游戏)
  • Python基于Pytorch Transformer实现对iris鸢尾花的分类预测,分别使用CPU和GPU训练
  • 【运动规划算法项目实战】如何实现简单的状态机
  • JavaScript实现用while语句计算1+n的和的代码
  • Three.js教程:顶点索引复用顶点数据