【java学习—九】内部类(7)

news2024/9/24 4:28:37

文章目录

  • 1. 概念
  • 2. 内部类特性
  • 3. 内部类实现多重继承的应用


1. 概念

    (1)在 Java 中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。
    (2)Inner class 一般用在定义它的类或语句块,在外部引用它时必须给出完整的名称

注:Inner class 的名字不能与包含它的类名相同。

    (3)Inner class 可以使用外部类的私有数据,因为它是外部类的成员,同一个类的成员之间可相互访问。而外部类要访问内部类中的成员需要 : new 内部类.成员或者new 内部类对象.成员

下面举个例子来说明:

package day09;

public class Test3 {
	int i;
	public int z;
	private int k;
	
	class A {//内部类
	
		int i;//内部类可以有自己的属性
		
		public void setTest3Fileds() {
			Test3.this.i = 1;//设置外部类的属性
			Test3.this.z = 2;
			Test3.this.k = 3;
		}
		
		public void set() {//内部类可以有自己的方法
			this.i = 10;
			}
	}
	
	public void setInfo() {//通过内部类设置外部属性
		new A().setTest3Fileds();//外部的类要想使用自己的内部类的方法,得先new内部类的对象
	}
	
	public void showInfo() {//显示属性
		System.out.println(this.i);
		System.out.println(this.z);
		System.out.println(this.k);
	}
	
	public static void main(String[] args) {
		Test3 t = new Test3();
		t.setInfo();
		t.showInfo();
	}
	
}

2. 内部类特性

Inner class 作为类的成员:
(1)可以声明为 final 的
(2)和外部类不同, Inner class 可声明为 private 或 protected ;
(3)Inner class 可以声明为 static 的,但此时就不能再使用外层类的非 static 的成员变量;
Inner class 作为类:
(1)可以声明为 abstract 类 ,因此可以被其它的内部类继承
【注意】非 static 的内部类中的成员不能声明为 static 的,只有在外部类或 static 的内部类中才可声明 static 成员。

核心作用:内部类最大的作用是实现多重继承

package day09;

public class Test3 {
	int i;
	public int z;
	private int k;
	
	//声明内部类:A、B、C、D、E
	
	class A {//内部类
		int i;
		public void setTest3Fileds() {
			Test3.this.i = 1;
			Test3.this.z = 2;
			Test3.this.k = 3;
		}
		
		public void set() {
			this.i = 10;
		}
	}
	
	
	final class B {//除了声明为final。与外部类不同,内部类还可以声明为private、protected类
		
	}
	
	
	static class C {//如果内部类是static的,就不能使用外部类的非static的成员
		
	}
	
	abstract class D {//可以声明为 abstract 类,被其它的内部类继承
		
	}
	
	class E extends D {//E类继承D抽象类
		
	}	

}

3. 内部类实现多重继承的应用

内部类主要是解决java不能多重继承的问题

举例:
代码如下

package day09;

public class Test4 {
	public static void main(String[] args) {
		A a = new A();
		a.testB();
		a.testC();
	}

}
/**
 * 现在类A想同时获得类B和类C的方法(java无法进行多继承),并且重写
 * 可以使用内部类来变相的实现类的多重继承,可以继承多个类
 * @author 14532
 *
 */

class A {
	
	public void testB() {
		new InnerB().testB();
	}
	
	
	public void testC() {
		new InnerC().testC();
	}
	
	private class InnerB extends B{
		@Override
		public void testB() {
			System.out.println("这是重写之后的testB方法");
		}
	}
	
	
	private class InnerC extends C{
		@Override
		public void testC() {
			System.out.println("这是重写之后的testC方法");
		}
	}

}

class B {
	public void testB() {
		
	}
}

class C {
	public void testC() {
		
	}
	
}

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1143322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊哪个站点好做?亚马逊全球站点介绍!

前言 亚马逊全球有18个站点,其中七大站点分别为:北美站、欧洲站、日本站、澳洲站、印度站、中东站、新加坡站。按照国家和地区分为中国、美国、加拿大、墨西哥、英国、德国、法国、西班牙、意大利、澳大利亚、日本、印度、土耳其、中东和巴西。不同的站…

GoLong的学习之路(十三)语法之标准库 log(日志包)的使用

上回书说到,flag的问题。这回说到日志。无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯。 文章目录 log配置logger配置日志前缀配置日志输出位置自定义logger …

vscode配置C/C++

首先下载 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/ 解压到一个方便的文件夹中 在环境变量中添加 C:\mingw64\bin验证添加的环境变量,打开cmd,输入gcc --version 进入vscode进行配置 安装插件 进行配置 gcc和g的配置文件…

基于ssm民宿推荐系统(2023年☆全网唯一)【附PPT|开发文档|表结构|万字文档(LW)和搭建文档】

主要功能 前台登录: 注册用户:用户账号、密码、姓名、头像、性别、年龄、手机、身份证号 用户: ①首页、近期活动展示、新闻资讯、系统简介、关于我们、近期活动推荐、热门客房推荐、查看更多 ②近期活动、民宿名称搜索、热门客房、客房名称…

常见排序实现

排序 1.排序的概念及其运用排序的概念 2.常见排序算法的实现插入排序直接插入排序希尔排序( 缩小增量排序 ) 选择排序直接选择排序堆排序 交换排序冒泡排序快速排序快速排序优化快速排序非递归 归并排序非比较排序 3.排序算法复杂度及稳定性分析 1.排序的概念及其运用 排序的概…

SpringCloud之Sentinel概述和安装及简单整合

目录 Sentinel概述 基本介绍 Sentinel 基本核心概念 Sentinel安装 简单安装启动 启动配置项 SpringCloud简单整合 实战架构 父工程pom文件 teacher-service服务 student-service服务 测试 整合Sentinel Sentinel概述 基本介绍 Sentinel是阿里巴巴开源的一款微…

haproxy高可用集群

高可用集群 Haproxy :他是常用的负载均衡软件 Nginx 支持四层转发,和七层转发 Haproxy 也可以四层和七层转发 LVS的DR发和nat是基于四层还是七层的转? 都基于是四层转发&#xff08…

算法通过村第十七关-贪心|白银笔记|贪心高频问题

文章目录 前言区间问题判断区间是否重复合并区间插入区间 字符串分割加油站问题总结 前言 提示:如果生活把你的门关上了,那你就再打开,这就是门,门就是这样的。 --佚名 贪婪的思想不一定要理解的很透彻,但是贪婪的问题…

学习Java应该关注哪些网站?

前言 下面是我总结的一些不错的网站,可以收藏看一下哈~希望对你有帮助 一、入门教程类 主要是教程性质的网站,主要是新手学习参考以及相关知识的内容参考 1、菜鸟教程(https://www.runoob.com) 2、Java学习笔记(http…

2023年【广东省安全员A证第四批(主要负责人)】考试内容及广东省安全员A证第四批(主要负责人)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 广东省安全员A证第四批(主要负责人)考试内容根据新广东省安全员A证第四批(主要负责人)考试大纲要求,安全生产模拟考试一点通将广东省安全员A证第四批&#x…

红眼特效出处竟是斯大林电脑病毒

相信不少小伙伴看过这种红眼特效的视频,那么你知道这个特效最早出自哪里吗? 其实这个红眼病毒最早出于一个俄罗斯的电脑病毒斯大林上,一旦电脑感染这个病毒,屏幕上就会出现一个红眼特效的斯大林,同时不断播放前苏联国…

学习笔记:最小生成树

最小生成树 引入 我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。 注意:只有连通图才有生成树,而对于非连通图,只存在生成森林。 实现 求最小生成树的算法有 Prim…

力扣每日一题73:矩阵置零

题目描述: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2…

多线程---wait和notify

文章目录 使用场景使用方法原理notify VS notifyAll 使用场景 我们都知道线程的调度是“随机的”,但是我们在很多时候都希望多个线程能够按照一个预期的顺序来执行。wait和notify就是用来调配线程执行顺序的。 使用方法 public static void main(String[] args) {…

Hand Avatar: Free-Pose Hand Animation and Rendering from Monocular Video

Github: https://seanchenxy.github.io/HandAvatarWeb 1、结构摘要 MANO-HD模型:作为高分辨率网络拓扑来拟合个性化手部形状将手部几何结构分解为每个骨骼的刚性部分,再重新组合成对的几何编码,得到一个跨部分的一致占用场纹理建…

?SW转cad尺寸不一致

应该是330 中心线不对

x86-32-Linux下栈溢出攻击原理

在x86-32-Linux下构造一个栈溢出攻击 栈缓冲区溢出攻击:向栈上的数组写入超过数组长度的数据导致覆盖到正常数据{栈帧上的返回地址}。 IA-32下C函数调用约定: 调用者将参数从右向左入栈,构造参数call 指令短跳转,会将call指令下一…

【每日一题】从数量最多的堆取走礼物

文章目录 Tag题目来源题目解读解题思路方法一:排序方法二:优先队列 其他语言python3 写在最后 Tag 【优先队列】【排序】【数组】【2023-10-28】 题目来源 2558. 从数量最多的堆取走礼物 ​ 题目解读 执行 k 次操作,每次从数量最多的堆中取…

VirtualBox 安装 麒麟Linux

为了验证Oracle EM是否可以管理麒麟OS和其上的Oracle数据库,今天试着在VirtualBox上装了麒麟Linux,也就是银河麒麟。整个过程比较顺畅。 选定ISO文件后,操作系统自动识别为Red Hat。勾选“跳过自动安装”: 内存和CPU选的默认值&…

AFsim 仿真运行

创建完仿真模型平台后,点击Warlock.exe程序,弹出仿真运行的窗口,点击浏览选择创建好的test文件,点击运行。 点击运行后,进入仿真运行的主页面,如下图所示: 1.仿真控制 顶部工具栏中文件的内容。…