论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Java内部类
Java内部类
老婆出轨
金牌会员
|
2024-7-24 23:24:13
|
显示全部楼层
|
阅读模式
楼主
主题
890
|
帖子
890
|
积分
2670
一、内部类
内部类的概念:在一个类的内部在定义一个完整的类。如下代码:
class Outer{
class Inner{
}
}
复制代码
特点:
内部类在编译之后也可以生成独立的字节码文件,即上述Inner类在编码后可以生成class文件;
内部类可以直接访问外部类的私有成员,而不破坏封装;
内部类可为外部类提供必要的内部功能组件。
public class Body {
private String name = "qqqqqq";
class Header{
public void show(){
System.out.println(name);
}
}
}
复制代码
分类:成员内部类、静态内部类、局部内部类、匿名内部类。
二、成员内部类
成员内部类要在类的内部定义,是与实例变量、实例方法同级别的类。
//外部类
public class Outer {
// 实例变量
private String name = "张三";
private int age = 10;
//内部类
class Inner{
private String address = "成都";
private String phone = "12345678901";
// 方法
public void show(){
// 打印外部类的属性
System.out.println(name);
System.out.println(age);
// 打印内部类中的属性
System.out.println(address);
System.out.println(phone);
}
}
public static void main(String[] args) {
Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.show();
}
}
复制代码
外部类的一个实例部门,创建内部类时,必须依赖外部类对象
Outer outer = new Outer();
Inner inner = outer.new Inner();
复制代码
当外部类、内部类存在同名属性是,会优先访问内部类属性;内部类属性和外部类属性名字雷同,要加上外部类名.this,如下:
成员内部类不能定义静态成员\(static\),但是可以定义\(static\ \ final\)常量。
三、静态内部类
不依赖外部对象,可以直接创建或通过类名访问,可以声明静态成员
只有内部的类才可以用static修饰,普通的类(外部类)不能用static修饰。
public class Outter {
private String name = "XXX";
private int age = 10;
static class Inner{
private String add = "成都";
private String phone = "12345678910";
private static int count = 100;
public void show(){
// 调用外部类的属性
// 1、先创建外部类的对象
Outter outter = new Outter();
// 2、调用外部类对象的属性
System.out.println(outter.name);
System.out.println(outter.age);
// 调用静态内部类的属性和方法
System.out.println(add);
System.out.println(phone);
// 调用静态内部类的静态属性
System.out.println(Inner.count);
}
}
public static void main(String[] args) {
Inner inner = new Inner();
}
}
复制代码
静态内部类Inner和Outter是同一级别的,由于Inner是静态的,在创建Outter时,static的类也同时被创建了。
四、局部内部类
定义在外部类的方法中,作用范围和创建对象范围仅限于当前方法中。局部内部类访问外部类当前方法中的局部变量时,因无法保障变量的生命周期与自身雷同,变量必须修饰为final。
注意:局部内部类是在方法中定义的,所以声明局部内部类就要在方法中创建局部内部类对象。
注意:在局部内部类的方法中定义的局部变量,默认局部变量为常量final,数据内容不可修改。
局部内部类不能定义静态成员\(static\),但是可以定义\(static\ \ final\)常量。
public class Outer {
private String name = "xxx";
private int age = 18;
public void show(){
// 定义的局部变量
String address = "成都";
// 局部内部类不能加任何修饰符
class Inner{
String phone = "12345678901";
String email = "qqqqqq@qq.com";
public void show2() {
// 访问外部类的属性
System.out.println(Outer.this.name);
System.out.println(Outer.this.age);
// 访问内部类的属性
System.out.println(this.phone);
System.out.println(this.email);
// 访问局部变量,默认为常量final
System.out.println(address);
}
}
// 创建局部内部类对象
Inner inner = new Inner();
inner.show2();
}
public static void main(String[] args) {
Outer outer = new Outer();
outer.show();
}
}
复制代码
五、匿名内部类
本质就是没有类名的局部内部类(一切特征都与局部内部类雷同)
必须继承一个父类或者实现一个接口
定义类、实现类、下黄建对象的语法合并,只能创建一个该类的对象。
Usb.java
public interface Usb {
void service();
}
复制代码
Mouse.java
public class Mouse implements Usb{
@Override
public void service() {
System.out.println("鼠标已经链接");
}
}
复制代码
TestUsb.java
public class TestUsb {
public static void main(String[] args) {
// 创建接口类型的变量
// Usb usb = new Mouse();
// usb.service();
// 局部内部类
// class Fan implements Usb{
// @Override
// public void service() {
// System.out.println("连接电脑成功,电扇开始工作...");
// }
// }
//
// Usb usb = new Fan();
// usb.service();
// 匿名内部类
Usb usb = new Usb() {
@Override
public void service() {
System.out.println("连接电脑成功,电扇开始工作...");
}
};
usb.service();
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
老婆出轨
金牌会员
这个人很懒什么都没写!
楼主热帖
1000套安卓(Android)毕业设计(带论 ...
【Linux学习】网络基础 和 SOCKET套接 ...
在工作中离屏真的不重要吗,代码优化就 ...
设计模式必知必会系列终章
牛客SQL刷题第三趴——SQL大厂面试真题 ...
MySQL完整版详解
亚马逊云科技Build On-Amazon Neptune ...
python采集世界大学排名并作数据可视化 ...
Git + Jenkins 自动化 NGINX 发布简易 ...
SRC基础抓包
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表