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

内部类基础

1.成员内部类

1.1成员内部类的访问特点

  • 内部类可以直接访问外部类的成员,包括私有

  • 外部类要访问内部类的成员,必须要创建对象

1.1.1应用实例:

需求:写一个javabean类描述一个汽车
属性:品牌,车龄,颜色,发动机的 品牌,使用年限

public class Car {String carName;int carAge;String carColor;public void show(){System.out.println(carName);Engine e = new Engine();System.out.println(e.engineName);}public class Engine{String engineName;int engineAge;public void show(){System.out.println(carName);System.out.println(engineAge);}}}
public class Test {public static void main(String[] args) {Car c = new Car();c.carName = "奔驰";c.carAge = 10;c.carColor = "黑色";c.show();}
}

1.3如何创建成员内部类对象?

编写成员内部类的注意点:

1.成员内部类可以被一些修饰符所修饰,比如:private,默认,protected,public,static

获取成员内部类的两种方式:

1.外部类编写方法

对外提供内部类对象(内部类函数被private修饰的时候)

代码实例:
public class Outer {String name;public class Inner{}//在外部类中定义方法,返回一个内部类对象public Inner getInstance(){return new Inner();}
}
public class Tset {public static void main(String[] args) {Outer o = new Outer();//使用了多态,用父类接收子类Object instance = o.getInstance();System.out.println(instance);}
}

2.直接在Test类中创建内部类对象

格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;

范例: Outer.Inner inner = new Outer().new Inner();

public class Outer {String name;public class Inner{}
}
public class Tset {public static void main(String[] args) {//外部类名.内部类名  对象名 = 外部类对象.内部类对象;Outer.Inner inner = new Outer().new Inner();System.out.println(inner);}
}

1.4成员内部类如何获取外部类的成员变量?

面试题:

当外部类成员变量和内部类成员变量重名时,在内部类如何访问

 public class Outer {
    private int num = 10;
    public class Inner{
        private int num = 20;
        public void show(){
            int num = 30;
            System.out.println(num);//30
            System.out.println(this.num);//20
            //Outer.this 获取了外部类对象的地址值 
            System.out.println(Outer.this.num);//10
        }
    }
}
public class Test {
    public static void main(String[] args)
    {
        Outer.Inner inner = new Outer().new Inner();
        inner.show();
    }
}

2.静态内部类

静态内部类是一种特殊的成员内部类

静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建外部类的对象。

相关文章:

  • 08-Registry搭建docker私仓
  • Eureka注册中心如何实现集群
  • Python/大数据/机器识别毕业设计选题题目推荐
  • Java研学-BootStrapTable插件
  • 监控和日志管理:深入了解Nagios、Zabbix和Prometheus
  • 【CSS】盒子模型
  • Vue 之组件插槽Slot用法(组件间通信一种方式)
  • 基于NXP LS1046+FPGA的轨道交通3U CPCI多网口解决方案,支持QNX/VXWOKRS/LINUX
  • ERP系统委外工单管理
  • Hive ROW_NUMBER() 简介
  • kubernets资源相关内容介绍
  • 鸢尾花书实践和知识记录[编程1-10可视化]
  • CSS——边框线条动画效果
  • Spring Boot 进阶-Spring Boot的全局异常处理机制详解
  • Linux之实战命令19:tac应用实例(五十三)
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • axios 和 cookie 的那些事
  • docker python 配置
  • echarts花样作死的坑
  • js
  • k8s 面向应用开发者的基础命令
  • Python爬虫--- 1.3 BS4库的解析器
  • quasar-framework cnodejs社区
  • SpringBoot几种定时任务的实现方式
  • Sublime Text 2/3 绑定Eclipse快捷键
  • SwizzleMethod 黑魔法
  • Swoft 源码剖析 - 代码自动更新机制
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从PHP迁移至Golang - 基础篇
  • 大主子表关联的性能优化方法
  • 分类模型——Logistics Regression
  • 警报:线上事故之CountDownLatch的威力
  • 开源SQL-on-Hadoop系统一览
  • 类orAPI - 收藏集 - 掘金
  • 如何用vue打造一个移动端音乐播放器
  • 算法---两个栈实现一个队列
  • 线性表及其算法(java实现)
  • 一道面试题引发的“血案”
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 一天一个设计模式之JS实现——适配器模式
  • 移动端 h5开发相关内容总结(三)
  • 异常机制详解
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 怎样选择前端框架
  • 正则学习笔记
  • Prometheus VS InfluxDB
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • #1014 : Trie树
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $NOIp2018$劝退记
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论