java内部类
来源:互联网 发布:爱普生清零软件中文版 编辑:程序博客网 时间:2024/06/03 21:42
外部类:外部类必须是public,不能更改访问权限修饰符。
内部类: 把一个类写在了另一个类或方法中, 可以设置访问权限修饰符。
成员内部类
- 在类中创建的类称为成员内部类。
- 可以拥有private、protected访问权限修饰符。
- 实例化是时必须先new出外部类的对象。
- 外部类和内部类属性同名,默认使用内部类。
- 若要使用外部类的方法和属性:外部类名.this.变量名或方法名
局部内部类
被定义在某个方法或者代码块中。 仅限于方法体内使用。
匿名内部类
没有名称
所有的匿名内部类必须继承一个类或实现一个接口。
匿名内部类引用外部参数时,必须为常量。
静态内部类
被static修饰的成员内部类是静态内部类
不依赖于外部类,可以直接创建对象。
外部类和内部类会生成两个class文件,内部类有外部类的指针引用存在。
代码示例
public abstract class Animal { public abstract void eat();}
public interface Fly { void fly();}
public class Demo { private String name="小黑"; private int age=9; /* * 成员内部类 */ class Inner{ private String name="小白"; private int age=10; public void say(){ System.out.println("InnerClass:name是"+name+"\tage是"+age); System.out.println("Demo:name是"+Demo.this.name+"\tage是"+Demo.this.age); } } /* * 静态成员内部类 */ static class InnerTwo{ private String name="小红"; private int age=11; public void say(){ System.out.println("static class Inner :name是"+name+"\tage是"+age); } } /* * 局部内部类 */ public void getMessage(final String name){ class InnerMethod{ private int age=12; public void say(){ System.out.println("Demo:getMessage是"+name+"\tage是"+Demo.this.age); } } InnerMethod inme=new InnerMethod(); inme.say(); } /* * 匿名内部类 */ class Noname{ public void noName(final String name){ Animal dog=new Animal() { @Override public void eat() { System.out.println("形参中的name是"+name+"\tDemo:name是"+Demo.this.age); } }; dog.eat(); } } class Noname2{ public void noName(final String name){ Fly bird=new Fly() { @Override public void fly() { // TODO Auto-generated method stub System.out.println("形参中的name:"+name+"\tage是"+Demo.this.age); } }; bird.fly(); } }}
public class Test { public static void main(String[] args) { /* * 实例化成员内部类 */ Inner inner=new Demo().new Inner(); inner.say(); /* * 实例化静态内部类 */ InnerTwo innertwo=new InnerTwo(); innertwo.say(); /* * 调用局部内部类 */ Demo demo=new Demo(); demo.getMessage("sdf"); /* * 匿名内部类实例化 */ Noname noname=new Demo().new Noname(); noname.noName("堆堆"); /* * 匿名内部类实例化 */ Noname2 noname2=new Demo().new Noname2(); noname2.noName("怼怼"); }}
InnerClass:name是小白 age是10Demo:name是小黑 age是9static class Inner :name是小红 age是11Demo:getMessage是sdf age是9形参中的name是堆堆 Demo:name是9形参中的name:怼怼 age是9
为何局部内部类和匿名内部类里只能接收final的参数呢?
https://www.cnblogs.com/dolphin0520/p/3811445.html
阅读全文
0 0
- 【Java】【内部类】Java 内部类简介
- [Java] Java 内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- java的内部类、匿名内部类、局部内部类
- java内部类之成员内部类、静态内部类
- java 成员内部类 局部内部类,匿名内部类
- Java 静态内部类/内部类
- java内部类、静态内部类 小结
- Java内部类,静态内部类
- JAVA 内部类与静态内部类
- java内部类--局部内部类
- Java 内部类以及匿名内部类
- 懒惰、急躁和傲慢(Laziness, Impatience and hubris)
- memmove的实现
- darwin之sdp信息解读(SDPSourceInfo)
- MySQL 基础之了解基本操作和基本数据类型
- 课程4 项目二
- java内部类
- curl命令详解
- 对 SSL协议进行wireshark抓包实验
- Mongodb字段更新$setOnInsert操作符
- 二叉树的遍历
- SSH框架 Blob类型图片处理
- LPC1768 移植freeRTOS
- Ubuntu安装tomcat
- Java SimpleFileVisitor遍历文件夹与File遍历文件夹的速度对比