Introduction to internal classes
A class defined in another class is called an internal class
Member internal class
1..new You must first create a member internal class Create an instance of the outer class, and then create an object of the inner class through .new
2..this You can access all properties and methods of the outer class through the class name of the outer class.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 } } }
Anonymous inner class
A class without a name will also create an object when the class is created.
You can use anonymous inner classes if you only need to use them once.
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(); }
Anonymous objects
This object only needs to be accessed once.
new Thread() { @Override public void run() { System.out.println("线程开始!"); try { Thread.sleep(2000); System.out.println("线程结束!"); } catch (Exception e) { e.printStackTrace(); } super.run(); } }.start();
Static inner class
1. Static inner classes can only access static methods and variables of external classes, but cannot access non-static ones.
2. Static inner classes can be created directly without creating a reference to the outer class.
Anonymous inner classes access local variables
Inner classes must be final when accessing local variables. If not added, jdk1.8 adds it by default
When the variables used are changing You can use the following method, or you can set the following i as static at the beginning
for (int i = 0; i < 5; i++) { final int finali = i; new Thread() { public void run() { System.out.println(finali); }; }.start(); }
The following introduces the implementation skills of internal classes
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"); } }
Thanks for reading, I hope it can help To everyone, thank you for your support of this site!
For more detailed explanations and examples of java internal classes (anonymous classes, anonymous objects, static internal classes) and related articles, please pay attention to the PHP Chinese website!