内部类是在一个类中定义另一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类。
内部类的定义格式:
内部类格式:
public class 类名(){
修饰符 class 类名(){
}
}
内部类的访问特点:
内部类可以直接访问外部类的成员,包括私有成员变量;
外部类必须通过创建对象来访问内部类;
public class Outer {
private int num=10;
//内部类
public class Inner {
public void show(){
System.out.println(num);
}
}
//在方法内通过创建对象来访问内部类
public void method(){
Inner i=new Inner();
i.show();
}
}
2、成员内部类
在类的成员位置:成员内部类
创建对象的格式:外部类名.内部类名 对象名=new 外部类名().new 内部类名();
public class Outer {
private int num=11;
/*//公共成员内部类
public class Inner{
public void show(){
System.out.println(num);
}
}*/
//私有类不能被别的类调用
private class Inner {
public void show() {
System.out.println(num);
}
}
//在外部类中可以调用私有内部类
public void method(){
Inner i=new Inner();
i.show();
}
}
测试类:
public class Test {
public static void main(String[] args) {
//创建内部类对象,并调用方法
// Outer.Inner i= new Outer().new Inner();
// i.show();
Outer o=new Outer();
o.method();
}
}
3、局部内部类
在类的局部位置:局部内部类
- 局部内部类是在方法中定义的类,所以外界是无法直接使用的,需在方法内创建对象并使用
- 该类可以直接访问外部类成员,也可以访问方法内的局部变量
public class Outer {
private int num=111;
public void method(){
int num1=22;
//局部内部类,
class Inner{
public void show(){
System.out.println(num);
System.out.println(num1);
}
}
Inner i=new Inner();
i.show();
}
3.1、匿名内部类
匿名内部类:
前提:
存在一个类或接口;这里的类可以是具体类也可以是抽象类
格式:
-
new 类名或接口名(){ 重写方法; };
本质是一个继承了该类或者实现了该接口的子类匿名对象。
public interface Interface {
void show();
}
public class Outer {
public void method(){
/*new Interface(){
@Override
public void show() {
System.out.println("匿名内部类");
}
};*/
// show();
//多次调用
Interface i=new Interface(){
@Override
public void show() {
System.out.println("匿名内部类");
}
};
i.show();
i.show();
i.show();
i.show();
}
}
public class Test {
public static void main(String[] args) {
Outer o=new Outer();
o.method();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)