JAVA基础--内部类

概念

如果一个事物的内部包含另外一个事物,那么这就是一个类内部 包含另一个类。
例如:身体很心脏的关系,又如,汽车和发动机的关系。
分类:
1、成员内部类
2、局部内部类

1、成员内部类

—在外部类中直接定义内部类,格式为类的正常格式
public class Body { // 外部类
public class Heart {
public void MethodInner () { // 内部类
System.out.println(“内部类”);
}
}
}

—使用方法

(1)间接调用,通过外部类的方法进行调用内部类

public void Method () {
System.out.println("外部类");
new Heart().MethodInner();
}

(2)直接调用
外部类名称.内部类名称 对象名称 = new 外部类名称().new 内部类名称();

Body.Heart heart = new Body().new Heart();
内部类与外部类成员变量名重名问题
public class Outer {
int num = 30;
public class inner {
int num = 20;
public void Method () {
int num =10;
System.out.println(num); // 就近原则,使用内部变量
System.out.println(this.num); // 内部类的成员变量
System.out.println(Outer.this.num); // 外部类的成员变量
}
}
}

2、局部内部类

如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。
局部内部类,只能当前所属的方法才能使用,出了这个方法,外面就不能使用了。

定义格式为一般类没有修饰符的格式

public class localOuter {
public void Method () {
class localInner {
int num = 10;
public void MethodInner () {
System.out.println(num);
}
}
localInner inner = new localInner();
inner.MethodInner();
}
}

局部内部类,如果希望访问所在方法的局部变量,那么这个局部变量必须是**【有效final】**

在这里插入图片描述

类的权限修饰符

public > protected > (default) > private
定义一个类的时候,权限修饰符规则:
1、外部类:public / (default)
2、成员内部类: public / protected / (default) /private
3、局部内部类:什么都不能写

匿名内部类

–如果接口实现类(或者是父类的子类)只需要使用一次。
那么这种情况下就可以省略该类的定义,而改为使用【匿名内部类】。

匿名内部类的格式:
接口名称 对象名 = new 接口名称 (){
// 覆盖重写所有的抽象方法
};

MyInterface obj = new MyInterface() {
@Override
public void Method() {
System.out.println("匿名内部类");
}
};
obj.Method();
匿名内部类的注意事项:

1、匿名内部类,在创建对象的时候,只能使用唯一一次。
如果希望多次创建对象,而且内容一样的话,那么必须使用单独定义的实现类了。
2、匿名对象,在调用方法的时候,只能调用唯一一次。
如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
3、匿名内部类是省略了【实现类/实现子类】,但是匿名对象时省略了【对象名称】
强调:匿名内部类和匿名对象不是一回事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值