在类的内部定义一个类,内部类的实例化方式又两种,一种是在main方法里面实例化,这种方法是不推荐的,还有一种是在外部类中实例化内部类,这样就安全性就高一点,最好是把内部类定义成私有方法。
public class NeiBu {
public static void main(String[]args) {
foo5 k = new foo5();
// foo5.func l = k.new func(); //不建议此方法
// l.aa();
k.run5();
}
}
//外部类
class foo5{
private int age;
//建议在外部类中实例化内部类
public void run5() {
func o = new func();
o.aa();
}
//内部类
private class func{
public void aa() {
System.out.println("我是内部类");
}
}
方法内部类,只要在方法中定义一个类就可以了,在方法内部类中的数据类型只能是常量,不能是变量,就算没有加修饰符final也会默认成final。所以只能访问并不能改变
public void run() {
//在方法内部类中只能使用常量,jdk1.8之后都可以使用。但是不能更改他的值
final int age1=14;//
class func1{
public void run1() {
System.out.println("方法内部类"+age1);
}
}
func1 w = new func1();
w.run1();
}
匿名内部类需要先声明一个抽象类,然后再方法中new抽象类,需要注意的是这里并不是实例化,而是一个语句,是以分号结尾的,然后再new作用域外面调用就可以了
//匿名内部类
public void eat1() {
foo7 j = new foo7() {
public void eat() {
// TODO Auto-generated method stub
System.out.println("我是匿名内部类");
}
};
j.eat();
}
}
abstract class foo7{
public abstract void eat();
}