80070583类不存在_Java自学-接口与继承 内部类
Java 内部类
内部类分为四种:
非静态内部类 静态内部类 匿名类 本地类
步骤 1 : 非静态内部类
非静态内部类 BattleScore “战斗成绩”
非静态内部类可以直接在一个类里面定义
比如:
战斗成绩只有在一个英雄对象存在的时候才有意义
所以实例化BattleScore 的时候,必须建立在一个存在的英雄的基础上
语法: new 外部类().new 内部类()
作为Hero的非静态内部类,是可以直接访问外部类的private实例属性name的
package charactor;public class Hero {private String name; // 姓名float hp; // 血量float armor; // 护甲int moveSpeed; // 移动速度// 非静态内部类,只有一个外部类对象存在的时候,才有意义// 战斗成绩只有在一个英雄对象存在的时候才有意义class BattleScore {int kill;int die;int assit;public void legendary() {if (kill >= 8)System.out.println(name + "超神!");elseSystem.out.println(name + "尚未超神!");}}public static void main(String[] args) {Hero garen = new Hero();garen.name = "盖伦";// 实例化内部类// BattleScore对象只有在一个英雄对象存在的时候才有意义// 所以其实例化必须建立在一个外部类对象的基础之上BattleScore score = garen.new BattleScore();score.kill = 9;score.legendary();}}
步骤 2 : 静态内部类
在一个类里面声明一个静态内部类
比如敌方水晶,当敌方水晶没有血的时候,己方所有英雄都取得胜利,而不只是某一个具体的英雄取得胜利。
与非静态内部类不同,静态内部类水晶类的实例化 不需要一个外部类的实例为基础,可以直接实例化
语法:new 外部类.静态内部类();
因为没有一个外部类的实例,所以在静态内部类里面不可以访问外部类的实例属性和方法
除了可以访问外部类的私有静态成员外,静态内部类和普通类没什么大的区别
package charactor;public class Hero {public String name;protected float hp;private static void battleWin(){System.out.println("battle win");}//敌方的水晶static class EnemyCrystal{int hp=5000;//如果水晶的血量为0,则宣布胜利public void checkIfVictory(){if(hp==0){Hero.battleWin();//静态内部类不能直接访问外部类的对象属性System.out.println(name + " win this game");}}}public static void main(String[] args) {//实例化静态内部类Hero.EnemyCrystal crystal = new Hero.EnemyCrystal();crystal.checkIfVictory();}}
步骤 3 : 匿名类
匿名类指的是在声明一个类的同时实例化它,使代码更加简洁精练
通常情况下,要使用一个接口或者抽象类,都必须创建一个子类
有的时候,为了快速使用,直接实例化一个抽象类,并“当场”实现其抽象方法。
既然实现了抽象方法,那么就是一个新的类,只是这个类,没有命名。
这样的类,叫做匿名类

package charactor;public abstract class Hero {String name; //姓名float hp; //血量float armor; //护甲int moveSpeed; //移动速度public abstract void attack();public static void main(String[] args) {ADHero adh=new ADHero();//通过打印adh,可以看到adh这个对象属于ADHero类adh.attack();System.out.println(adh);Hero h = new Hero(){//当场实现attack方法public void attack() {System.out.println("新的进攻手段");}};h.attack();//通过打印h,可以看到h这个对象属于Hero$1这么一个系统自动分配的类名System.out.println(h);}}
步骤 4 : 本地类
本地类可以理解为有名字的匿名类
内部类与匿名类不一样的是,内部类必须声明在成员的位置,即与属性和方法平等的位置。 本地类和匿名类一样,直接声明在代码块里面,可以是主方法,for循环里等等地方
package charactor;public abstract class Hero {String name; //姓名float hp; //血量float armor; //护甲int moveSpeed; //移动速度public abstract void attack();public static void main(String[] args) {//与匿名类的区别在于,本地类有了自定义的类名class SomeHero extends Hero{public void attack() {System.out.println( name+ " 新的进攻手段");}}SomeHero h =new SomeHero();h.name ="地卜师";h.attack();}}
步骤 5 : 在匿名类中使用外部的局部变量
在匿名类中使用外部的局部变量,外部的局部变量必须修饰为final
为什么要声明为final,其机制比较复杂,请参考第二个Hero代码中的解释
注:在jdk8中,已经不需要强制修饰成final了,如果没有写final,不会报错,因为编译器偷偷的帮你加上了看不见的final
package charactor;public abstract class Hero {public abstract void attack();public static void main(String[] args) {//在匿名类中使用外部的局部变量,外部的局部变量必须修饰为finalfinal int damage = 5;Hero h = new Hero(){public void attack() {System.out.printf("新的进攻手段,造成%d点伤害",damage );}};}}
package charactor;public abstract class Hero {public abstract void attack();public static void main(String[] args) {//在匿名类中使用外部的局部变量damage 必须修饰为finalint damage = 5;//这里使用本地类AnonymousHero来模拟匿名类的隐藏属性机制//事实上的匿名类,会在匿名类里声明一个damage属性,并且使用构造方法初始化该属性的值//在attack中使用的damage,真正使用的是这个内部damage,而非外部damage//假设外部属性不需要声明为final//那么在attack中修改damage的值,就会被暗示为修改了外部变量damage的值//但是他们俩是不同的变量,是不可能修改外部变量damage的//所以为了避免产生误导,外部的damage必须声明为final,"看上去"就不能修改了class AnonymousHero extends Hero{int damage;public AnonymousHero(int damage){this.damage = damage;}public void attack() {damage = 10;System.out.printf("新的进攻手段,造成%d点伤害",this.damage );}}Hero h = new AnonymousHero(damage);}}
相关文章:
java 初识对象和对象引用的关系
在接触java之前就知道了java的对象引用,但概念一直很模糊,看了《Head First in Java》后觉得书中的例子很有趣,便分享给大家。 首先要搞清对象引用是什么? 我们都知道变量可以存放数据,就像杯子一样,不同大…

IOS UI 代码创建UIButton,UITextField,UILabel
//add a Label UILabel *label[[UILabelalloc]initWithFrame:CGRectMake(100,20, 150, 40)]; [label setText:"i am a label "]; label.font[UIFontsystemFontOfSize:20]; label.textAlignmentNSTextAlignmentLeft; //文字内容自适应标签宽度 label.adjustsFontSizeT…

Hash join 和nested loop
Hash join 和nested loop 总所周知,Oracle数据库常用的两种优化器:RBO(rule-based-optimizer)和CBO(cost-based-optimizer)。目前更多地采用CBO(cost-based-optimizer)基于开销的优化器。在CBO方式下,Oracle会根据表及…

minus oracle 顺序_oracle minus的用法来一波
Oracle Minus关键字SQL中有一个MINUS关键字,它运用在两个SQL语句上,它先找出第一条SQL语句所产生的结果,然后看这些结果有没有在第二个SQL语句的结果中。如果有的话,那这一笔记录就被去除,而不会在最后的结果中出现。如…

我现在的vimrc配置文件
我现在的vimrc配置文件 runtime! debian.vim "设置编码 set encodingutf-8 set fencsutf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 set fileencodingsutf-8,ucs-bom,chinese"语言设置 set langmenuzh_CN.UTF-8" command WQ wq command Wq wq command W w…

UVA 10269 Adventure of Super Mario
UVA_10269 由于马里奥的飞行距离有限,因此为了方便处理,我们首先用floyd预处理出马里奥可以飞行的两点间的最短路,然后再将图分成K1层用SPFA求最短路即可。 #include<stdio.h>#include<string.h>#define MAXD 130#define MAXN 20…
“5G杀手级应用”Cloud VR 华为如何打响5G第一枪
雷锋网消息,近日华为在上海召开华为云 5G Cloud VR服务发布会暨5G Cloud VR开发者沙龙,Cloud VR有何潜力成为5G第一批杀手级应用,华为又在其中扮演怎样的角色。Cloud VR和5G更配生产决定消费,消费反作用于生产,对于5G也…

昆仑通态通用版找不到驱动_2021深圳新安西门子伺服驱动电机回收合作共赢
2021深圳新安西门子伺服驱动电机回收合作共赢 一个企业,应尽量做到PLC的机型统主要考虑到以下三方面问题:机型统其模块可互为备用,便于备品备件的采购和管理。机型统其功能和使用方法类似,有利于技术力量的培训和技术水平的提高。机型统其外部设备通用,资源可共享,易…

熟人Dubbo 系列1-Dubbo什么
Dubbo阿里巴巴内部SOA治理方案和服务的核心框架。每天2000 个服务提供3,000,000,000 次訪问量支持,并被广泛应用于阿里巴巴集团的各成员网站。Dubbo自2011年开源后,已被很多非阿里系公司使用。Dubbo[]是一个分布式服务框架,致力于提供高性能和…

CentOS源码安装GitLab汉化版第3版
软件版本: 软件版本CentOS7.5GraphicsMagick1.3.31Git2.21.0Ruby2.5.3Go1.12Node.js10.15.2PostgreSQL11.2Redis5.0.3GitLab11.8.0 汉化版Nginx1.14.21. 安装依赖 yum -y install libicu-devel patch gcc-c readline-devel zlib-devel libffi-devel openssl-devel m…

用JSP+JDBC开发Web程序
以前一直想找个纯粹的JSPJDBC开发Web程序的架构,一直没有找到合适的,后来自己写了一个简单实现,并实施了几个项目。 此开发架构的特点是: 1.架构技术简单,只包含JSP和JDBC,不需要学习即可快速开发Web应用&a…

catia怎么创建约束快捷键_答疑 | CATIA结构树无法显示怎么办?
问题有小伙伴反馈,设计过程中,CATIA的结构树不见了……怎么办?问题听起来很简单,但总能难倒一些新手。原因与解决方案:下面针对产生该问题的不同的原因,提出不同的解决方案。第一种情况原因:结构…

【UVA】11992 - Fast Matrix Operations(段树模板)
主体段树,要注意,因为有set和add操作,当慵懒的标志下推。递归优先set,后复发add,每次运行set行动add马克清0 WA了好几次是由于计算那一段的时候出问题了,可笑的是我对着模板找了一个多小时的错。 #include&…

记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案
问题概述使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死。严重影响业务。 问题前提:老系统…

SQL Server 2008 下载地址(微软官方网站)
哪里有sqlserver2008下载?2011-9-24 23:58提问者:ooseestars | 浏览次数:3252次2011-9-26 11:38最佳答案SQL Server 2008 下载地址(微软官方网站) 中文版(3.28GB):http://sqlserver.dlservice.microsoft.com/dl/download/B/8/0/B8…

java实现最长连续子序列_最长公共子序列 ||
问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种。难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在动态规划表上进…

替换元素和非替换元素的学习
替换元素和非替换元素的学习 (元素)[妙瞳] 引言 元素是文档结构的基础,在CSS中,每个元素生成了一个包含了元素内容的框(box,也翻译为“盒子”)。但是不同的元素显示的方式会有所不同,例如div和span不同,而s…

第十六天-企业应用架构模式-离线并发模式
1.乐观离线锁 (Optimistic Offline Lock) 运行机制 使用时机 例:领域层与数据层数据映射器 2.悲观离线锁 (Pessimistic Offline Lock) 运行机制 使用时机 例:简单锁管理对象 3.粗粒度锁 (Coarse…

hdu1518 bjfuoj1042 zoj1909 poj2362 经典的搜索加剪枝
bjfuoj的测试数据最水,用很简单的方法一下就过了,又调了好长时间,才过掉其它OJ上的这道题目~ /* * hdu1518/win.cpp * Created on: 2011-11-8 * Author : ben*/#include <cstdio>#include <cstdlib>#include <cstring>#…

投影参数_智能投影仪参数如何去看,其实很简单
我又来给大家安利投影仪了,毕竟用过的都知道有多刺激,但是估计很多人看到参数就头疼了吧?所以话不多说,直接上科普啦流明亮度流明怎么算的,家人们就不用详细了解了,只用记住,流明越高画面就越亮…

zoj 3554 A Miser Boss
题意:有a、b、c三个人同时工作,三个人做不同的任务需要不同的时间,但最后要求三个人做事情的总时间相同,输出做完所有任务需要的最少时间,如果无法达到三个人总工作时间相同,则输出“No” 当时一股脑筋觉着…

二进制_Kubernetes集群二进制部署
一、环境规划操作系统:CentOS7.4_x64kubernetes安装目录:/opt/kubernetes版本说明:Kubernetes:v1.9Docker:v17.12.0-ceEtcd:3.1二、安装Docker在所有节点执行:setenforce 0iptables -Fiptables …

delphi对窗体的查询(delphi xe2)
1、显示所有窗口的标题 2、根据关键字查询窗口 3、某一窗口内的所有控件及其内容 . unit Unit1;interfaceusesWinapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;typeTFo…

Buffer的工作方式
1、Buffer的工作方式 前面《java NIO的工作方式》介绍了Selector检测到通信信道I/O有数据传输时,通过select()方法取得SocketChannel,将数据读取或写入Buffer缓冲区,下面讨论Buffer如何接受和写出数据。通过查看JDK源码可知道,…

PHP 相关配置
2019独角兽企业重金招聘Python工程师标准>>> 1. php-fpm的pool 编辑php-fpm配置文件php-fpm.convim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容include etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vhost” 的配置 创建存放pool配置…

学生教育云平台登录入口_湖南省教育云平台登录入口
湖南省教育云平台官方网站http://www.hnzyzx.com/,好学网的中小学频道为学友整理。 湖南省教育网: 点击登录: 湖南省教育云平台登录系统 下方为湖南信息教育云平台登录入口图示:安全教育平台学生姓名错误处理方法…

flash中制的SWC组件怎样导入到flex中使用
flash中制的SWC组件怎样导入到flex中使用2010-04-30 11:18在使用FLASH导出SWC组件文件后,放入项目的LIB文件夹,然后要用实例化一个对象才能进行时操作使用, 但要记得的是,导出时候要再导出的组件处勾选链接,勾选为AS导…

开源智能手机 Librem 5 跳票了,推迟至第3季度发布
百度智能云 云生态狂欢季 热门云产品1折起>>> 由 Purism 公司打造的开源智能手机 Librem 5 原计划于2019年4月正式发布。但根据官方最新的消息,Librem 5 将推迟至2019年第3季度发货。 根据之前的消息,Librem 5 的预售价为 599 美元。 Librem …

js 获取URL后面的参数
1、有时间由于缓存问题,用PHP可能就不是太好处理,所以可以用客户端进行URL的处理 如下:js 获取URL后面的参数 <script> function getUrlParam(name) { //获取url参数 var reg new RegExp("(^|&)" name "([^&…

机械键盘恢复出厂fn_黑爵毛茸茸系列机械键盘评测
写在前面之前试用过黑爵的巧克力键盘,给我留下了挺不错的使用体验,不仅外观设计上好看,原厂Cherry轴体手感也不错,这次有幸体验到黑爵新品毛茸茸系列键盘实属荣幸。开箱学弟这次拿到的键盘是Cherry青轴,可能是快递有些…