成员内部类
静态成员内部类
格式
public class A{
static class B{
内容;
}
}
调用
A.B 对象名 = new A.B();//创建对象
对象名.方法()
非静态成员内部类
格式
public class 外部类{
class 内部类{
内容;
}
}
调用
外部类.内部类 对象名 = new 外部类().new 内部类(); //创建对象
内外部类重名变量区分
利用this关键字
public class Student {
String name = "张三";
class Leg{
String name = "王五";
public void qqq(String name){
System.out.println(name); //内部类的局部变量
System.out.println(this.name);//内部类的成员变量
System.out.println(Student.this.name);//外部类的成员变量
}
}
}
局部内部类
class 外部类{
void 成员方法(){
class 内部类{
内容
}
new 内部类.内容;
}
}
对于局部内部类而言,我们在其他类中不能直接new对象
所以我们在他所在的方法中new,并且调用,在其他类中只需new外部类,调用外部类的成员方法进行使用
public class Teacher {
public void teach(){//成员变量
class Heart{//局部内部类
public void bomb(){
System.out.println("嘭嘭嘭");
}
}
new Heart().bomb();//成员方法中创建局部内部类对象并调用方法
}
}
局部内部类实际操作
public class Test04 {
public static void main(String[] args) {
USB usb = run();//多态
usb.run();
}
public static USB run(){
class Mouse implements USB{//局部内部类
@Override
public void run() {
System.out.println("跑");
}
}
return new Mouse();//返回值是实现对象
}
}
接口作为参数传递,传递的是实现类对象;接口作为返回值,返回的是实现类对象
抽象类作为参数传递,传递的是子类对象;返回的是子类对象