static 定义内部类(静态内部类)使用static定义内部类,此时的内部类不再受外部类实例化对象的影响,所以等同于于一个“外部类”,内部类的名称为“外部类.内部类”,同时static定义的内部类只能调用外部类中static定义的结构,并且在进行内部类的实例化时也不再需要先获取外部类实例化对象,static内部类对象实例化格式如下:
外部类内部类内部类对象外部类内部类
package neibu; public class Lian { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(); Outer.Intter inttera = new Outer.Intter("guoqun"); inttera.name(); } } class Outer{ public Outer(int age) { super(); this.age = age; } public Intter getInfo() { Intter inter = new Intter("guoqun"); return inter ; } private int age ; static class Intter{ private String name ; public Intter(String name) { super(); this.name = name; } public void name() { System.out.println(this.name); } } }使用static 定义内部接口(静态内部类) package neibu; public class Lian { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(); JieKou.Load load = new LoadFace(); JieKou.Compare compare = new CompareFace(); JieKou.getInfo(load, compare); } } interface JieKou{ // 内部接口 static interface Load { public abstract boolean loadData(); } static interface Compare { public abstract void compareData(); } public static void getInfo(Load sLoad , Compare sCompare) { if (sLoad.loadData()) { Compare.compareData(); } else { System.out.println("加载失败"); } } } class LoadFace implements JieKou.Load{ public boolean loadData() { return true; } } class CompareFace implements JieKou.Compare{ public void compareData() { System.out.println("compareData"); } } 方法中定义内部类(局部类) package neibu; public class Lian { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(); Outer outer = new Outer(12); outer.getInfo(); } } class Outer{ private int age ; public Outer(int age ) { this.age = age ; } public void getInfo() { class Inter { // 内部类 public void interFun() { System.out.println("interFun" + Outer.this.age) ; } } new Inter().interFun() ; } }【Java 内部类详解】如果一个类只在某个方法中使用,则可以考虑使用局部类 。
匿名内部类,函数式接口匿名内部类使用广泛,如我们常用的绑定监听的时候 。
package neibu; public class Lian { public static void main(String[] args) { /* 接口对象无法直接实例化,使用匿名内部类后就可以利用对象的实例化格式获取接口实例 */ Face face = new Face() { // 匿名内部类 @Override public void name() { // TODO Auto-generated method stub System.out.println("sss"); } }; } } @FunctionalInterface interface Face { public abstract void name(); }在接口中利用匿名内部类实现接口 package neibu; public class Lian { public static void main(String[] args) { FaceN.getFace().name(); } } interface FaceN { public abstract void name(); public static FaceN getFace() { return new FaceN() { @Override public void name() { System.out.println("在接口中利用匿名内部类实现接口"); } }; } }适合于接口只有一个子类的时候,并且也可以对外部调用处隐含子类 。
推荐阅读
- 操作系统内存最全解析!!!
- 5 个提升你 JavaScript 编码水平的实例
- 听说这招能在3秒内启动Windows10,很多高手都这么做,你知道吗?
- Java HashMap遍历的四种方式
- 5种创建Java对象的方式
- Java中数据传输加密与签名那些事
- Java随机产生中文昵称
- JDBC基础整理
- 华三防火墙内网用户通过公网地址访问服务器
- 华三防火墙发布内网服务器配置案例
