java 内部类(匿名类,匿名对象,静态内部类)详解及实例
发布时间:2020-12-14 14:36:09 所属栏目:Java 来源:网络整理
导读:内部类的介绍 定义在另外一个类中的类,叫内部类 成员内部类 1..new 创建成员内部类必须先创建外部类的实例,然后通过.new 创建内部类的对象 2..this 可以通过外部类的类名.this去访问外部类的所有属性和方法。 public class Test1 { String name = "asnd";
内部类的介绍 定义在另外一个类中的类,叫内部类 成员内部类 1..new 创建成员内部类必须先创建外部类的实例,然后通过.new 创建内部类的对象 2..this 可以通过外部类的类名.this去访问外部类的所有属性和方法。 public class Test1 { String name = "asnd"; public static void main(String[] args) { Test1 test1 = new Test1(); Inner mInner = test1.new Inner(); mInner.print(); } void show() { System.out.println("show"); } public class Inner { String name = "123"; private void print(){ show(); System.out.println(name);//打印的是123 System.out.println(Test1.this.name);//打印的是asnd } } } 匿名内部类 没有名字的类,创建类的同时,也会创建一个对象。 只需要用到一次的类,就可以使用匿名内部类 File file = new File("D:/cc.txt") { @Override public boolean delete() { System.out.println("是否删除y/n"); Scanner input = new Scanner(System.in); String str = input.next(); if (str.equals("y")) { return super.delete(); } System.out.println("删除失败"); return false; } }; file.delete(); } 匿名对象 该对象只需要访问一次. new Thread() { @Override public void run() { System.out.println("线程开始!"); try { Thread.sleep(2000); System.out.println("线程结束!"); } catch (Exception e) { e.printStackTrace(); } super.run(); } }.start(); 静态内部类 1.静态内部类只能访问外部类静态的方法和变量,不能访问非静态。 2.静态内部类可以不需要创建外部类的引用,而直接创建。 匿名内部类访问局部变量 内部类访问局部变量必须final,如果没有加,jdk1.8默认加上去了 for (int i = 0; i < 5; i++) { final int finali = i; new Thread() { public void run() { System.out.println(finali); }; }.start(); } 下面介绍一下内部类的实现技巧 public static void main(String[] args) { Lam mLam = new Lam(); //第一种实现的方法 mLam.to(new Ligh() { @Override public void shin() { System.out.println("on的第一种方法"); } }); //第二种实现方法 class MyLam implements Ligh{ @Override public void shin() { System.out.println("第二种"); }} mLam.to(new MyLam()); } } interface Ligh { void shin(); } class Lam { public void to(Ligh ligh) { ligh.shin(); System.out.println("on"); } } 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 使用for-each循环时LinkedList中的Nullpointer异常
- java – 在显示之前获取JPopupMenu大小
- java – 检查类是否存在而不运行到ClassNotFoundException
- Java8 Stream – 来自IntStream的字节的HashSet
- java – 在JBOSS中升级Hibernate版本
- java – 未找到Google Drive SDK活动异常
- Java的二进制整数程序求解器
- java – 如何改进我的junit测试
- java – Android中的FileUriExposedException
- java-8 – Java8:在同一方法输出上过滤和映射