可以修饰类,方法和成员变量
final修饰的类不能被继承final修饰的方法不能被覆盖final修饰的变量是常量,只能赋值一次
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Outer
{ int num = 3; class Inner { int num = 4; void show() { int num = 5; System.out.println(Outer. this.num); } } void method() { new Inner().show(); } } |
内部类可以放在局部位置上内部类在局部位置上只能访问局部中被final修饰的局部变量
匿名内部类其实就是一个匿名子类对象。
格式:new 父类or接口(){子类内容}
Java Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
abstract class Demo
{
abstract void show();
}
class Outer
{
int num = 4;
/*
class Inner extends Demo
{
void show()
{
System.out.println("show ..."+num);
}
}
*/
public void method()
{
//new Inner().show();
/* Demo de = */ new Demo() //匿名内部类。
{
void show()
{
System.out.println( "show ........" + num);
}
} .show();
// de.show();
}
}
class InnerClassDemo4
{
public static void main( String[] args)
{
new Outer().method();
}
}
1
2 3 4 5 6 7 8 9 |
Object obj =
new Object()
{ public void show() { System.out.println( "show run"); } }; obj.show(); |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
interface Inter { void show1(); void show2(); } class InnerClassDemo5 { public static void main( String[] args) { System.out.println( "Hello World!"); show( new Inter() { public void show1() {} public void show2() {} }); } public static void show(Inter in) { in.show1(); in.show2(); } } |
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
class Thread
{ private Runnable r; Thread() { } Thread(Runnable r) { this.r = r; } public void run() { if(r != null) r.run(); } public void start() { run(); } } class ThreadImpl implements Runnable { public void run() { System.out.println( "runnable run"); } } ThreadImpl i = new ThreadImpl(); Thread t = new Thread(i); t.start(); class SubThread extends Thread { public void run() { System.out.println( "hahah"); } } SubThread s = new SubThread(); s.start(); |