Skip to main content

moregeek program

一文让你学会java中的内部类_mb6353c9b8a50b6的博客-多极客编程

内部类


概念



如果一个事物的内部包含另一个事物,那么这就是一个类内部包含另一个类。
例如:身体和心脏的关系。又如:汽车和发动机的关系。



分类



1.成员内部类
2.局部内部类(包含匿名内部类)



成员内部类的定义


成员内部类定义格式:

修饰符 class 外部类名称{
修饰符 class 内部类名称{
//...
}
//...
}


注意:内用外,随意访问;外用内,需要内部类对象。



举例配合理解:
在这里插入图片描述


成员内部类的使用



如何使用成员内部类?
有两种方式:
1.间接方式:在外部类的方法当中,使用内部类;然后main只是调用外部类的方法。
2.直接方式,公式:
类名称 对象名 = new 类名称();
【外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();】



举例配合理解:
在这里插入图片描述
在这里插入图片描述


内部类的同名变量访问


在这里插入图片描述
在这里插入图片描述


局部内部类的定义与使用


在这里插入图片描述
举例配合理解:
在这里插入图片描述
在这里插入图片描述


局部内部类的final问题


在这里插入图片描述


匿名内部类



如果接口的实现类(或者是父类的子类)只需要使用唯一的一次, 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】。
说白了就是想用一个接口,就必须有个实现类,在覆盖重写里面的抽象方法,而如果匿名内部类,那么就不需要实现类,直接在主方法里面new接口,补上大括号,重写抽象方法即可。




匿名内部类的定义格式:

接口名称 对象名 = new 接口名称(){ //覆盖重写所有抽象方法};

小细节:注意大括号后面要有分号,不要忘记。



举例配合理解:
在这里插入图片描述


匿名内部类注意事项


在这里插入图片描述



学习匿名内部类主要是让大家以后在阅读别人代码的时候,能够理解。并不代表以后都要这样写。因为匿名内部类有两个缺点:
缺点1:太复杂,太乱,可读性差。
缺点2:类没有名字,以后想重复使用,不能用。



类作为成员变量类型


代码举例:


public class Weapon {
private String code; //武器的代号

public Weapon() {
}

public Weapon(String code) {
this.code = code;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}
}


public class Hero {

private String name; //英雄名字
private int age; //年龄
private Weapon weapon; //武器 类作为成员变量类型

public Hero() {
}

public Hero(String name, int age, Weapon weapon) {
this.name = name;
this.age = age;
this.weapon = weapon;
}

public void attack(){
//age 和 name, 可以直接往里面拼,但是weapon是一个对象,它是一个类,需要get它里面的代号(一定要把code拿出来,在往里面拼)
System.out.println("年龄为"+age+"的"+name+"正在用"+weapon.getCode()+"疯狂杀敌,渐渐的杀红眼!!");
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public Weapon getWeapon() {
return weapon;
}

public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
}


public class 主方法 {
public static void main(String[] args) {
//创建一个英雄角色
Hero hero = new Hero();
//为英雄起一个名字,并且设置年龄
hero.setName("飞飞");
hero.setAge(20);

//创建一个武器对象
Weapon weapon= new Weapon("七星剑");
//为英雄配备武器
hero.setWeapon(weapon);

hero.attack(); //调用attack方法

}
}

执行结果:年龄为20的飞飞正在用七星剑疯狂杀敌,渐渐的杀红眼!!

接口作为成员变量类型


在这里插入图片描述
在这里插入图片描述


接口作为方法的参数或返回值


在这里插入图片描述


©著作权归作者所有:来自51CTO博客作者mb6353c9b8a50b6的原创作品,请联系作者获取转载授权,否则将追究法律责任

#yyds干货盘点# 动态规划专题:涂色paint_风的博客-多极客编程

1.简述:描述假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。输入描述:输入仅一行,包含一个长度为n的字

#yyds干货盘点# leetcode程序员面试金典:判定字符是否唯一_灰太狼_cxh的博客-多极客编程

题目:实现一个算法,确定一个字符串 s 的所有字符是否全都不同。示例 1:输入: s = "leetcode"输出: false 示例 2:输入: s = "abc"输出: true代码实现:class Solution { public boolean isUnique(String astr) { char[] chars = astr.toCharArray();

java高效找出两个大数据量list集合中的不同元素_write less,do more。的博客-多极客编程

本文将带你了解如何快速的找出两个相似度非常高的List集合里的不同元素。主要通过Java API、List集合双层遍历比较不同、借助Map集合查找三种方式,以及他们之间的执行效率情况,话不多说,开搞! 集合初始化方法: /** * 制造任意个元素的的List集合 * @param size List集合的size * @return List<Strin

观察者模式在spring中的应用_京东云官方的博客-多极客编程

作者:王子源1 观察者模式简介1.1 定义指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。1.2 角色介绍在观察者模式中,有以下几个角色。主题也叫被观察者(Subject):定义被观察者必须实现的职责,它能动态的增加取消观察者,它一般是抽象类或者是实现类,仅仅完成作为被观察

java实现list去重的5种方式_write less,do more。的博客-多极客编程

通过HashSet去重(不保证顺序) public static List<String> getUserList() { List<String> userList = new ArrayList<>(); userList.add("小王"); userList.add("小张");

spring security(6)_湘王的博客-多极客编程

您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~Spring Security使用MySQL保存cookie记录虽然方便,但是目前更多的主流互联网应用都是用NoSQL来保存非业务数据的,Spring Security也应该可以实现这个功能。之前Spring Security官方并不支持使用NoSQL来保存cookie,但这个问题对于一个爱钻研的码农来说应该只是个小CASE——毕竟只要

vector的底层实现!(万字长文详解!)_mb634f511ccb70e的博客-多极客编程

vector的底层简单实现! vector的成员变量 template<class T> class vector { typedef T* iterator;//迭代器 typedef const T* const_iterator; private: iterator _start; iterator _finish; iterator _endofstorage;

深入浅出学习透析nginx服务器的基本原理和配置指南「keepalive性能分析实战篇」_李博alex的博客-多极客编程

Linux系统:Centos 7 x64Nginx版本:1.11.5Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 HTTP,HTTPS 和邮件相关(SMTP,POP3,IMAP)的协议链接。并且提供了负载均衡以及 HTTP 缓存。它的设计充分使用异步事件模型,削减上下文调度的开销,提高服务器并发能力。采用了模块化设计,提供了丰富模块的第三方模块。所以关于 Nginx,有这些标签:

学习笔记-django框架的使用_wx637390d4de3a1的博客-多极客编程

前言:本博客为技术小白的记录学习过程,有错误或不解的地方请指出 !!!一.安装和创建项目1.安装1.1 命令行下载pip3 install django==1.11.11  (可以跟镜像地址: -i +镜像地址 )1.2 测试安装是否成功django-admin1.3注意事项:计算机名称不能含中文项目名称和py文件最好也不要使用中文django的版本:目前django最新版本为4.X, 本次学习选

【alibaba中间件技术系列】「nacos技术专题」服务注册与发现相关的原理分析_李博alex的博客-多极客编程

Nacos的概览Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付

适用于 linux 的 windows 子系统(wsl)安装指南_wx636d0c5e64939的博客-多极客编程

(目录 ) Windows Subsystem for Linux WSL提供了一个微软开发的Linux兼容内核接口(不包含Linux代码),来自Ubuntu的用户模式二进制文件在其上运行。 简单来说就是用Linux系统去使用Windows 一、WSL安装 1.启用“适用于Linux的Windows子系统” 在控制面板中找到“启用或关闭Windows功能” 启用“适用于Linux的Windo

python编程特殊小技巧汇集(一)_domi+1的博客-多极客编程

✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。 🍎个人主页:算法工程师的学习日志Python作为一种高级编辑语言,有很多使用的小技巧,分享一期。1、变量值互换a = 0b = 1a,b = b, a2、连续赋值a, b = 2, 13、自动解包赋值a,b,c,d = [1,3,4,'domi']aa,*others = [1,3,4,'domi']>&g