Java中内部类相关知识
内部类
1.1内部类概述
内部类就是指在一个类中定义一个类。举例:在一个类A的内部定义了一个类B,类B就称为内部类。
1.1.1内部类的定义格式
格式:
public class 类名{
修饰符 class 类名{
}
}
范例:
public class outer{
public class inner{
}
}
1.1.2内部类的访问特点
- 内部类可以直接访问外部类的成员,包括私有成员
- 外部类要访问内部类的成员必须创建对象
package com.itheima_05;
//外部类
public class Outer {
//外部类成员变量
private int age = 10;
//内部类
public class Inner{
public void show(){
//内部类可以直接访问外部类的成员,包括私有成员
System.out.println(age);
}
}
public void method(){
//外部类要访问内部类的成员必须创建对象
//show();
Inner i = new Inner();
i.show();
}
}
1.2成员内部类
按照内部类在类中定义的位置不同,可以分为如下两种方式:
- 在类的成员位置:成员内部类
- 在类的局部位置:局部内部类
成员内部类,外界如何访问创建对象使用呢?
格式:外部类名.内部类名 对象名 = new 外部类对象.内部类对象;
范例:Outer.Inner oi = new Outer().new Inner();
//外部类
public class Outer {
//外部类成员变量
private int age = 10;
//public的成员内部类
public class Inner{
public void show(){
//内部类可以直接访问外部类的成员,包括私有成员
System.out.println(age);
}
}
public void method(){
//外部类要访问内部类的成员必须创建对象
//show();
Inner i = new Inner();
i.show();
}
}
//测试类
public class InnerDemo {
public static void main(String[] args) {
//内部类是public权时创建内部类对象并调用方法
//错误写法 Inner i = new Inner();
Outer.Inner oi = new Outer().new Inner();
}
}
//外部类
public class Outer {
//外部类成员变量
private int age = 10;
//private成员内部类
private class Inner{
public void show(){
//内部类可以直接访问外部类的成员,包括私有成员
System.out.println(age);
}
}
public void method(){
//外部类要访问内部类的成员必须创建对象
//show();
Inner i = new Inner();
i.show();
}
}
public class InnerDemo {
public static void main(String[] args) {
//内部类是private权时创建内部类对象并调用方法
Outer o = new Outer();
o.method();
}
}
虽然没法直接调用内部类的方法,但是可以通过外部类对外给出的接口来对内部类进行操作,类似于成员变量的get/set方法。
1.3局部内部类
局部内部类是在方法中定义的类,所以外界是无法直接使用的,需要在方法内部创建对象并使用,该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
public class Outer {
//外部类成员变量
private int age = 10;
public void method(){
int age2 = 20;
//局部内部类
class Inner{
public void show(){
System.out.println(age);
System.out.println(age2);
}
}
Inner i = new Inner();
i.show();
}
}
//测试类
public class InnerDemo {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
1.4匿名内部类
是局部内部类的一种特殊形式
前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类
格式:
new 类名或者接口名(){
重写方法;
}
范例:
new Inter(){
public void show(){
}
}
匿名内部类本质上是一个继承了该类或者实现了该接口的子类匿名对象
public class Outer {
public void method(){
/*
new Inter(){
@Override
public void show() {
System.out.println("匿名内部类");
}
};
这么写仅仅是new了一个对象
*/
/*
//这么写是对象调用方法
new Inter(){
@Override
public void show() {
System.out.println("匿名内部类");
}
}.show();
*/
Inter i = new Inter(){
@Override
public void show() {
System.out.println("匿名内部类");
}
};
i.show();
}
}
public interface Inter {
void show();
}
public class OuterDemo {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
1.5匿名内部类在开发中的使用
public class JumppingDemo {
public static void main(String[] args) {
JumppingOperator jo = new JumppingOperator();
Cat c = new Cat();
//原来的方式,每次调用一次跳高操作类都要定义一个新对象并传入一个新对象
jo.method(c);
System.out.println("=============");
//匿名内部类
jo.method(new Jumpping() {
@Override
public void jumpping() {
System.out.println("猫会跳高");
}
});
jo.method(new Jumpping() {
@Override
public void jumpping() {
System.out.println("狗会跳高");
}
});
}
}
Java中内部类相关知识的更多相关文章
- JAVA中HashMap相关知识的总结(一)
Java中HashMap在jdk1.7和jdk1.8中的区别点: 在jdk1.7中是用数组+链表形式存储,1.8采用数组+链表/红黑树形式 Jdk1.8中由链表转为红黑树是长度大于8,由红黑树转为链表 ...
- 【Socket编程】Java中网络相关API的应用
Java中网络相关API的应用 一.InetAddress类 InetAddress类用于标识网络上的硬件资源,表示互联网协议(IP)地址. InetAddress类没有构造方法,所以不能直接new出 ...
- 第76节:Java中的基础知识
第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...
- java中内部类的讲解
java中有一个内部类的概念,由于之前一直比较忙,没有单独拿出时间总结一下,今天我就把内部类的相关知识进行一下汇总,如果有不足之处,欢迎批评指正. 1)java内部类的概念. 在一个类的的 ...
- Python中元组相关知识
下面给大家介绍以下元组的相关知识: ·元组可以看成是一个不可更改的list 1.元组的创建 # 创建空元祖 t = () print(type(t)) # 创建只有一个值的元组 # 观察可知元组中如果 ...
- Java中内部类的骚操作
10.1 如何定义内部类 如代码10.1-1 所示 public class Parcel1 { public class Contents{ private int value = 0; pu ...
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
本文主要记录:在JAVA中,(局部)内部类访问某个局部变量,为什么这个局部变量一定需要用final 关键字修饰? 首先,什么是局部变量?这里的局部是:在方法里面定义的变量. 因此,内部类能够访问某局部 ...
- java中关于锁知识的整理
1.1什么是锁? 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制.锁旨在强制实施互斥排他.并发控制策略. 锁通常需要硬件支持才能有效 ...
- java中内部类的积累
放在一个类的内部的类我们就叫内部类. 二. 作用 1.内部类可以很好的实现隐藏 一般的非内部类,是不允许有 private 与protected权限的,但内部类可以 2.内部类拥有外围类的所有元素的访 ...
- Java 网络编程相关知识
网络的一些基础知识 IP地址分类 IP地址根据网络ID的不同分为5种类型,A类地址.B类地址.C类地址.D类地址和E类地址.A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用 ...
随机推荐
- noi 2.1基本算法之枚举
7647:余数相同问题 1.描述 已知三个正整数 a,b,c. 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同. 请问满足上述条件的x的最小值是多少? 数据保证x有解. 2.输入 ...
- 标量子查询加聚合函数sql改写一
标量子查询的语句: select /*+ GATHER_PLAN_STATISTICS dwtest */ empno, (select count(*) from DEPT1 b where b.i ...
- saml login的流程
用户会访问首页/, 然后进入到指定的一个URL, 就是admin在site-settings里面的设置的那个地址, 发现权限不够,进入到403accesslogin, 然后调用user4032logi ...
- win10 蓝屏代码 IRQL NOT LESS OR EQUAL 问题排查(ing)
环境:Win10故障症状: 不定期蓝屏,重启 蓝屏代码: IRQL NOT LESS OR EQUAL 官方建议 尝试方法1:更新win10最新的补丁 [无效] 尝试方法2:重新安装显卡驱动(当前系统 ...
- Zookeeper ZAB协议-Leader&Followe 对象创建和启动源码解析
这篇博客主要是解析了Leader,Follower 对象的创建,相对来说比较简单,主要是了解一下在实例化的时候创建了哪些对象,这些对象会在数据传输的过程中发挥比较打的作用,如果有了解过的,可以直接跳过 ...
- Uri转绝对路径工具类
/** * 反射从 provider uri中获取 文件绝对路径 * @param context * @param uri * @return */ private static String ge ...
- 关于osqp
看了osqp的英文概要,记录如下: 1.采用交替方向乘子法 2.通过因式分解高速缓冲和热启动可以减少运算时间 3.适合嵌入式系统,实测mpc在10ms之内,路径规划在20ms左右(少障碍物),障碍物多 ...
- 洛谷P4562 [JXOI2018]游戏
题目 https://www.luogu.com.cn/problem/P4562 沉迷水题无法自拔(感觉校赛要大寄特寄qwq) 思路 可以fa现可怜的检查和员工的通风报信类似一个筛法的过程,当区间中 ...
- zookeeper设置开机自启
开机自启:(1)编辑zookeeper.service文件 vim /usr/lib/systemd/system/zookeeper.service 加入如下内容复制代码[Unit]Descript ...
- 阿里云 rocketMq 延时消息
初始化消费者和生产者 生产者 设置rocketmq的accesskey 和secretkey 以及rocketmq的 binder server. 首先 编辑一个配置类,将关于配置rocketmq的东 ...