一,内部类:类内部的类就是内部类,就是把一个类定义在另一个类中,那么内部的类就是内部类,内部类不能直接创建,创建方式为外部类.内部类 变量名 = new 外部类对象.new 内部类对象
内部类的特点:
1,本类可以直接创建内部类对象
2,内部类对象可以访问外部类的属性和方法
package interior;
public class TestInner {
public static void main(String[] args) {
//创建内部类对象
Outter.Inner inner = new Outter().new Inner();
inner.setInNum(13);
inner.inMethod();
System.out.println(inner.getInNum());
System.out.println("*********************");
new Outter().outMethod();
}
}
/**
* 外部类
*/
class Outter{
private int outNum;
public void outMethod() {
System.out.println("外部类的方法");
//外部类调用内部类的属性和方法
Inner i = new Inner();
i.setInNum(1);
System.out.println(i.getInNum());
i.inMethod();
}
public int getOutNum() {
return outNum;
}
public void setOutNum(int outNum) {
this.outNum = outNum;
}
/**
* 内部类
*/
class Inner{
private int inNum;
public void inMethod() {
System.out.println("内部类的方法");
System.out.println(outNum);
}
public int getInNum() {
return inNum;
}
public void setInNum(int inNum) {
this.inNum = inNum;
}
}
}
二,匿名类:没有名字的类,这种类需要在接口或者抽象类上实现,匿名类和匿名内部类都需要接口或抽象类的支持
package interior;
public class Anonymous {
public static void main(String[] args) {
//创建的不是接口本身, new myInter()大括号就是一个匿名类,此处因为在Anonymous内部所以是匿名内部类
myInter mi = new myInter() {
@Override
public void interMethod() {
System.out.println("匿名内部类的方法");
}
};
mi.interMethod();
//匿名内部类是一次性的,通常不引用时我们可以这样调用
new myInter() {
@Override
public void interMethod() {
System.out.println("这还是匿名内部类的方法");
}
}.interMethod();
}
}
/**
* 定义一个接口
*/
interface myInter {
public void interMethod();
}