一、内部类概论
内部类:就是在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类
二、内部类的访问特点
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员,必须创建对象
下面展示一些 内联代码片
。
package TEXT;
public class Outer {
//外部类私有变量
private int num = 20;
//外部类方法
public void outShow(){
System.out.println("外部类show方法");
}
//内部类
public class Inner{
public void inShow(){
System.out.println("内部类show方法");
System.out.println("num = " + num);
}
}
}
package TEXT;
public class Demo {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.inShow();
}
}
三、成员内部类
按照内部类在类中定义的位置不同,可以分成如下两种形式
- 在类的成员位置:成员内部类
- 在类的局部位置:局部内部类
成员内部类,外界如何创建使用呢?
- 格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象
- 范例:Outer.Inner oi = new Outer( ).new Inner;
像上面代码这样把内部类定义成public是不常见的,一般都弄成私有的,因此应该如下修改
package TEXT;
public class Outer {
//外部类私有变量
private int num = 20;
//内部类
private class Inner{
public void inShow(){
System.out.println("内部类show方法");
System.out.println("num = " + num);
}
}
public void show(){
Inner i = new Inner();
i.inShow();
}
}
package TEXT;
public class Demo {
public static void main(String[] args) {
Outer o = new Outer();
o.show();
}
}
四、局部内部类
- 局部内部类就是在方法中定义的类,所以外部是无法直接使用的,需要在方法内部创建对象并使用
- 该类可以直接访问外部类的成员,也可以访问方法内的局部变量
package TEXT;
public class Outer {
//外部类私有变量
private int num = 20;
public void show(){
//局部内部类
class Inner{
public void inshow(){
System.out.println("内部类show");
System.out.println("num = " + num);
}
}
//调用具备内部类
Inner i = new Inner();
i.inshow();
}
}
package TEXT;
public class Demo {
public static void main(String[] args) {
Outer o = new Outer();
o.show();
}
}
五、匿名内部类
前提:存在一个类或者接口,这里的类可以是具体也可以是抽象类
本质:是一个继承了该类或者实现了该类接口的子类匿名对象
package TEXT;
public class Outer {
public void show(){
//调用匿名内部类中show方法的方法如下
/* //一、该本质是一个对象,因此可以直接.show
new Inter(){
@Override
public void show() {
System.out.println("show方法");
}
}.show();*/
//二、创建一个对象
Inter i = new Inter(){
@Override
public void show() {
System.out.println("show方法");
}
};
i.show();
}
}
package TEXT;
/*
接口
*/
public interface Inter {
void show();
}
package TEXT;
/*
测试类
*/
public class Demo {
public static void main(String[] args) {
Outer o = new Outer();
o.show();
}
}
六、匿名内部类的应用
在开发中我们难免会用一些只用一次的对象,如果这些对象我们只用一次但却把他们创建成JAVA类,再在测试类中生成该对象,这会是个不太明智的选择,但是当我们应用匿名内部类,就能更好解决这个问题
package TEXT;
/*
接口
*/
public interface Jumpping {
void jump();
}
package TEXT;
public class JumppingOperator {
public void method(Jumpping j){
j.jump();
}
}
package TEXT;
/*
测试类
*/
public class Demo {
public static void main(String[] args) {
JumppingOperator jo = new JumppingOperator();
jo.method(new Jumpping() {
@Override
public void jump() {
System.out.println("猫可以跳高了");
}
});
JumppingOperator jo2 = new JumppingOperator();
jo2.method(new Jumpping() {
@Override
public void jump() {
System.out.println("狗可以跳高了");
}
});
}
}
可见,如果我们没有使用匿名内部类的话,我们就要分别创建一个猫对象和一个狗对象,在后期维护中会发现,这些只用一次的对象会严重浪费内存,因此像这种情况下我们优先考虑使用匿名内部类
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/95043.html