Java学习之道
内部类
内部类就是在一个类中定义另一个类,比如在A类中定义另一个类B,则B就是内部类
代码先看为敬:
Outter
package Inside_Class;
//外部类
public class Outter {
private int age = 20;
//内部类 通常是隐藏起来不能被外界调用,可以通过下面方法
public class Inner{
public void show(){
System.out.println(age);
}
}
//方法
public void method(){
Inner i = new Inner();
i.show();
}
}
测试类
package Inside_Class;
//测试类
public class Test {
public static void main(String[] args) {
Outter outter = new Outter();
outter.method();
System.out.println("-------");
//类名直接调用,只有内部类没有被private时才可以
Outter.Inner oi = new Outter().new Inner();
oi.show();
}
}
从这两个部分我们可以总结出内部类的访问特点
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员必须创建对象
成员内部类
按照内部类在类中定义的位置不同分为:
- 在类的成员位置:成员内部类
- 在内的局部位置:局部内部类【方法里面】
成员内部类外界如何创建对象使用
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
Outter.inner oi = new Outter().new Inner()
内部类变成私有,只能通过含有内部类里的方法调用
局部内部类
含义:定义在方法里面的内部类
- 局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用
- 该类可以直接访问外部类的成员,也可以方问方法内的局部变量
匿名内部类
- 前提:存在一个类或者接口,这里的类可以是具体类也可以是抽象类
- 本质:是一个继承了该类或者实现了该接口的子类匿名对象
接口
package Inside_Class.Part_Class;
//接口
public interface Inter {
public abstract void show();
}
方法一:
package Inside_Class.Part_Class;
public class Outter {
public void method(){
//本质是一个对象
new Inter(){
@Override
public void show(){
System.out.println("匿名内部类");
}
}.show();
}
}
方法二:
Inter i = new Inter(){
@Override
public void show(){
System.out.println("匿名内部类");
}
};
i.show();
测试类
package Inside_Class.Part_Class;
public class Test {
public static void main(String[] args) {
Outter out = new Outter();
out.method();
}
}
控制台
匿名内部类开发中使用
不需要创建多个子类去实现或者继承父类,直接可以通过匿名内部类形式创建,重写内部方法实现。