内部类
来源:互联网 发布:python抓取网易云音乐 编辑:程序博客网 时间:2024/06/13 08:20
定义:
类内部定义的类
内部类的访问规则
可以直接访问外部类的成员,包括私有
外部类要想访问内部类成员,必须创建对象
内部类的分类
1):成员内部类:在成员变量或者成员方法位置定义的类
成员静态内部类:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
成员非静态内部类:
外部类名.内部类名 对象名 = new 外部类名.new 内部类名();
private定义的成员内部类,不能直接访问,需要通过方法获取该类的对象
static 定义的类,可以看做外部类的成员变量;
2):局部内部类:在局部位置定义的类
局部内部类
局部内部类访问局部变量必须加final修饰 。
原先如下:
局部内部类定义在局部,而局部随着方法的消失而消失,局部定义的变量存储在栈中,随着方法调用结束而释放,但是类是在堆中,局部内部类调用局部变量,但是局部内部类发现找不到对应的变量了,所以我们要在局部内部类访问局部变量必须加final修饰 ,这样修饰后的变量还是存储在内存中,可以让局部内部类调用
public class Test { private String name = "lisi"; private static String passw = "lisi"; // 成员内部类 class People { public void method() { System.out.println("成员非静态内部类"); System.out.println("可以访问外部name:" + name); } } // 成员内部静态内部类,可以看做外部类成员 static class SuperPeople { public void method() { System.out.println("成员静态内部类"); System.out.println("可以访问外部passw:" + passw); } } // private 成员内部类 private class UserPeople { public void method() { System.out.println("private成员内部类"); } } public UserPeople getUserPeople() { return new UserPeople(); } // public void method3() { //局部内部类 final String pass="hello";//局部内部类访问局部变量必须用final修饰 class Woman { public void method() { // System.out.println("局部内部类"+name); System.out.println("局部内部类访问局部变量必须用final修饰:"+pass); } } //为了调用局部内部类方法 Woman woman=new Woman(); woman.method(); //匿名内部类 new HmanDao(){ @Override public void login() { System.out.println("匿名内部类HmanDao"); } }.login(); //匿名内部类 new Hman(){ public void method() { // System.out.println("匿名内部类Hman"); } }.method(); } public static void main(String[] args) { System.out .println("----------------访问成员非静态内部类方法-----------------------------"); // 访问成员非静态内部类 Test.People up = new Test().new People(); up.method(); System.out .println("----------------访问成员静态内部类方法-----------------------------"); // 访问成员静态内部类 Test.SuperPeople up2 = new Test.SuperPeople(); up2.method(); System.out .println("----------------访问成员private内部类方法---------------------"); // 访问成员private内部类 UserPeople up3 = new Test().getUserPeople(); up3.method(); // 局部内部类 System.out.println("-------------访问局部内部类方法--------------------"); Test test = new Test(); test.method3(); }}interface HmanDao { public static final int num = 1;//; only public, static & final are permitted public void login();}class Hman { public void method() { System.out.println("Hman类"); }}输出:----------------访问成员非静态内部类方法-----------------------------成员非静态内部类可以访问外部name:lisi----------------访问成员静态内部类方法-----------------------------成员静态内部类可以访问外部passw:lisi----------------访问成员private内部类方法---------------------private成员内部类-------------访问局部内部类方法--------------------局部内部类lisi局部内部类访问局部变量必须用final修饰:hello匿名内部类HmanDao匿名内部类Hman
3匿名内部类
A:是局部内部类的简化形式
B:前提:存在一个类或者接口
C:格式:
new 类名或者接口名() {
重写方法;
}
D:本质:
其实是继承该类或者实现接口的子类匿名对象
(8)匿名内部类好处
随着方法的介绍而结束; new 类名或者接口名() { 重写方法; } 本身就是使用完就结束
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- weblogic 启动常见错误解决
- 【SSH网上商城项目实战25】使用java email给用户发送邮件
- 【学习记录】4.使用Arrays给数组排序
- vim的基本配置与github上的两个高票配置
- 构造函数中子父类之间的调用问题
- 内部类
- 一 javase学习记录09
- ejoy2d wnidows下环境搭建过程
- 分布式服务框架的服务治理
- Java开发基础——JSON数据的构造与解析
- VR新玩法:戒毒挺靠谱
- (转)Android中延迟执行某个任务
- Great Atm
- Spring的AOP