内部类不多,就三种,但是知识点特别碎,总是把我搞迷糊。但我发现它和变量有些相似。哎!管它是什么?先写下来吧,好记性不如烂笔头么!
局部内部类
- 是指内部类定义在方法和作用域内
- 其作用域只在方法体内部
- 局部内部类的成员的方法的参数和局部变量必须是final定义的
- 不能使用private,protected,public 等访问修饰符
代码示例:
package innerclass;
/**
* 局部内部类,是指内部类定义在方法和作用域内
* 其作用域只在方法体内部
* 成员的方法的参数和局部变量必须是final定义的
* 不能使用private,protected,public 等访问修饰符
* @author Administrator
*
*/
public class JuBuClass {
private String name="关头请";
//成员的方法的参数和局部变量必须是final定义的
public ShowCla showName(final int b){
final int a = 10;
//其作用域只在方法体内部
//不能使用private,protected,public 等访问修饰符
class Clazz extends ShowCla{
private int num = 400;
public void show(){
System.out.print("jkdf"+b);
}
}
//new Clazz().show();
return new Clazz();
}
public static void main(String[] args){
JuBuClass jubu = new JuBuClass();
jubu.showName(10).show();
}
}
abstract class ShowCla{
public abstract void show();
}
测试结果:
jkdf10
成员内部类
- 如果外部类属性名和内部类属性名,我们用外部类.this来调用外部类的属性名
- 内部类的优点:可以不用创建对象去调用外部类的属性和方法
- 内部类的创建方式: 外部类.内部类 对象名 = new 外部类().new 内部类()
代码示例:
package innerclass;
public class School {
private String name="河南";
private int size = 100;
public void outShow(){
Clazz c = new Clazz();
c.show();
}
public class Clazz{
private int n=400;
public void show(){
size = 10;
System.out.println("内部show方法"+size);
}
}
public static void main(String[] args){
School s = new School();
Clazz c = s.new Clazz();
s.outShow();
}
}
测试结果:
内部show方法10
匿名内部类
由于匿名内部类没有名称,所以不能写构造方法
匿名内部类格式new 匿名类{方法体};
-
匿名内部类可以继承和实现一个接口
代码示例:
package innerclass; /** * 由于匿名内部类没有名称,所以不能写构造方法 * 匿名内部类格式new 匿名类{方法体} * 匿名内部类可以继承和实现一个借口 * @author Administrator * */ public class WuMing { private String name = "光头请"; public ShowCla cla(final int num){ return new ShowCla(){ private int size; public void show(){ System.out.println(size+" "+num); } }; } public static void main(String[] args){ WuMing wu = new WuMing(); wu.cla(10).show(); } }
测试结果:
0 10
递归:
1.有反复执行的过程(调用自身)
2.有反复执行过程的条件(递归出口)
//递归跟循环或者算法,运行效率低