内部类:
定义在A类中的B类就是内部类,B类在A类中的地位和其他成员相同,意思就是说可以相互调用
优点:通过内部类可以让java间接的实现多继承
创建内部类的对象
方法一
先获取内部类对象再调用方法
Outer out = new Outer();
外部类对象.new 内部类构造方法
Outer.Inner in = out.new Inner();
in.play();
方法二
借助于外部类方法实现内部类方法的调用
Outer out = new Outer();
out.show();
class Outer{
int age = 10;
class Inner{//内部类
int height = 20;
public void play() {
age+=10;
System.out.println("Inner - play"+ age);
}
}
public void show() {
System.out.println("Outer - show");
//相当于再使用Inner
Inner in= new Inner();
in.play();
}
}
局部内部类:
定义:在一个类中方法中的类
作用范围:从定义它开始到所在方法的结束
作用:既保证了代码的私有化,又对代码进行了整理,增加了代码的可读性,操作性
- 形式:
class 外部类名{
外部方法(){
内部类名{
内部方法(){
}
}
}
}
匿名内部类
匿名内部类(对象):定义在一个类方法中的匿名子类 对象,属于局部内部类
匿名内部类的作用:用于类的私有化,只让外部类看
研究匿名对象,匿名子类对象
class Text1 {
public void text1Method() {
System.out.println("text1Method");
}
}
class SubText1 extends Text1 {
public void text1Method() {
System.out.println("SubText1-Method");
}
}
创建匿名对象,完成方法的调用
new Text1().text1Method();
创建匿名子类对象
- 方法一 使用已有的子类声明子类对象,并调用方法
- 应用场景:现成的子类可以用很多次,相同的功能需要多次使用的时候
new SubText1().text1Method();
- 方法二:直接创建没有名字的Text1类的匿名类对象
构成:new 父类的名字/父类接口的名字+()+{
匿名子类的执行体
};
- 场景:只能使用一次,使用完立即释放,每次都使用不同的功能
Text1 t = new Text1() {
// 重写的Text1中的方法
public void text1Method() {
System.out.println("匿名");
}
// 子类特有的方法
public void bark() {
System.out.println("bark");
}
};
研究匿名内部类作为参数与返回值
作为参数
// 普通的匿名对象作为参数
public void textCanshu1() {
System.out.println(new Text1());
}
// 测试匿名内部类对象作为参数
public void textCanshu2() {
System.out.println(
new Text1() {
public String xiuxiuxiu() {
System.out.println("嘟嘟嘟");
// com.qinafeng.text.Out$3@4e25154f
return "dididi";
}
}.xiuxiuxiu());
}
作为返回值
//普通的匿名对象充当返回值
public Text1 textFanhuizhi1() {
return new Text1();
}
//匿名内部类充当返回值
public Text1 textFnhuizhi2() {
return new Text1() {
public void xiuxiuxiu() {
System.out.println("嘟嘟嘟");
}
};
}