内部类(Java)
内部类
基本介绍
- 概念:在一个类的内部再定义一个完整类
- 特点:编译之后可生成独立的字节码文件;内部类可以直接访问外部类的私有属性,不破坏封装性
- 分类:成员内部类;静态内部类;局部内部类;匿名内部类
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)的更多相关文章
- java基础(十三)-----详解内部类——Java高级开发必须懂的
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能 ...
- [内部类] java笔记之内部类
1.内部类的分类 2.成员内部类的定义格式 3.一旦使用了内部类,那么生成的class文件长啥样? 其中Body是外部类,Heart是Body的内部类,所以中间有个美元符号$,所以给类进行命名时,不要 ...
- java 笔记(2) —— 内部类的作用
一.内部类简介 个人觉得内部类没多少研究价值,GUI中的事件响应算是非常典型的应用了. Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理.其实,做非GUI编 ...
- “内部类” 大总结(Java)
(本文整理自很久以前收集的资料(我只是做了排版修改),作者小明,链接地址没有找到,总之感谢,小明) (后面也对"静态内部类"专门做了补充) 内部类的位置: 内部类可以作用在方法里以 ...
- Java的内部类真的那么难以理解?
01 前言 昨天晚上,我把车停好以后就回家了.回家后才发现手机落在车里面了,但外面太冷,冷到骨头都能感受到寒意——实在是不想返回一趟去取了(小区的安保还不错,不用担心被砸车玻璃),于是打定主意过几个小 ...
- 【Java_基础】Java内部类详解
1.四种内部类 java中的四种内部类:成员内部类.静态内部类.局部内部类和匿名内部类.其中匿名内部类用到的最多. 1.1.成员内部类 若一个类定义在另一个类的内部作为实例成员,我们把这个作为实例成员 ...
- 死磕Java内部类
Java内部类,相信大家都用过,但是多数同学可能对它了解的并不深入,只是靠记忆来完成日常工作,却不能融会贯通,遇到奇葩问题更是难以有思路去解决.这篇文章带大家一起死磕Java内部类的方方面面. 友情提 ...
- java内部类的本质
连接与通信,作为桥接中间件存在. 内部类和主体类可以无障碍通信: 1.通过继承连接实现: 2.通过接口连接通信: 形式: 1.命名空间: 2.运行上下文: 其它: 信息隐藏是次要功能. 内部类 Jav ...
- Java基础知识笔记第七章:内部类和异常类
内部类 /* *Java支持在一个类中定义另一个类,这样的类称为内部类,而包含内部类的类称为内部类的外嵌类 */ 重要关系: /* *1.内部类的外嵌类在内部类中仍然有效,内部类的方法也可以外嵌类的方 ...
- 基础篇:JAVA内部类的使用介绍
目录 1 四种内部类 2 内部类的使用场景和优点 3 成员内部类 4 成员内部类的访问范围详解 5 静态内部类 6 局部内部类 7 匿名内部类 欢迎指正文中错误 关注公众号,一起交流 参考文章 1 四 ...
随机推荐
- php json_encode 斜杠 反斜杠 转义处理
$data = str_replace("\\\\n", "\\n", \jsonEncode($data)); // \\n转为\n $data = str_ ...
- 通过Container制作Image
1.拉取tomcat镜像 docker pull tomcat docker images 2.根据tomcat镜像创建一个tomcat container docker run -d -it --n ...
- 2021 icpc 沈阳 I 【分式线性变换的保交比性】
分式线性变换的保交比性 对于分式线性变换,具有保交比性 应用 在复数域下,存在分式线性变换,给定三个输入和输出,再给定第四个输入,求其在这个分式线性变换下的输出. https://codeforces ...
- Flink 消费RabbitMQ 和 Kafka
在消息RabbitMQ时,我们关心的一个问题是手动ack还是自动ack,如果是自动ack就怕出现丢消息的情况 Flink以RabbitMQ作为Source,是怎么保证消息唯一性的呢,是怎么保证ack的 ...
- 爬qqhentai
import requestsfrom bs4 import BeautifulSoupimport timeimport reimport osimport randomagentlist = [& ...
- cublas fp16
编译选项: nvcc 4.cpp -o test_gemm -lcudart -lcuda -lcublas -std=c++11 #include <sys/time.h> #incl ...
- json extionsion
using System.Collections.Generic;using Newtonsoft.Json;using Newtonsoft.Json.Converters; namespace D ...
- 39.Feign
Java方式配置 /**局部**/ @FeignClient(value = "user-center", /*修改(user-center)feign的日志级别*/ config ...
- 当FTP不能满足大文件、海量文件传输时,有没有好的替代方案?
很多企业存在大文件.海量文件的传输需求,如涉及到图像数据采集和回传.海量用户数据收集和同步等业务,一般情况,企业还是会采用传统的FTP传输,或者以此为基础,使用脚本或结合其他办公工具来解决传输需求. ...
- vue项目element-ui组件打包后组件显示方框解决方式
在 utils.js文件添加一句代码 publicPath:'../../',