内部类分为静态和非静态两种,区分的标识为static
1.定义和概念
1.1非静态内部类
内部类的可以访问外部类的的成员,但是外部类如果要访问内部类
1.2静态内部类
二者关系:
2.使用内部类:
//Out
public class Out {
//In
public class In {
public In(String msg){
System.out.println("fun of in, msg: " + msg);
}
}
}
123456789 public class Study {
public static void main(String[] args) {
Out.In in1 = new Out().new In("first");
//create In type varable
Out.In in2;
Out out = new Out();
in2 = out.new In("Second");
}//main
}
3.局部内部类
4.匿名内部类
//Command.java
public interface Command {
void process(int[] target);
}
1234567891011121314 //AddCommand
public class AddCommand implements Command {
@Override
public void process(int[] target) {
// TODO Auto-generated method stub
int sum = 0;
for (int tmp : target) {
sum += tmp;
}
System.out.println(sum);
}
}
//ProcessArray.java
public class ProcessArray {
public void process(int[] target, Command cmd){
cmd.process(target);
}
}
12345678 //Main.java
public class Main {
public static void main(String[] args){
ProcessArray ay = new ProcessArray();
int[] array = {1, 2, 3};
ay.process(array, new AddCommand());
}
}
将类的实现用匿名内部类替换:
//Main.java
public class Main {
public static void main(String[] args){
ProcessArray ay = new ProcessArray();
int[] array = {1, 2, 3};
ay.process(array, new AddCommand()
{
@Override
public void process(int[] target) {
// TODO Auto-generated method stub
int sum = 0;
for (int tmp : target) {
sum += tmp;
}
System.out.println(sum);
}
});
}
}