A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、匿名内部类

在学习SSH框架动态代理时,静态代理有带理类,而动态代理没有代理类。但是动态代理有代理对象,对象的创建需要用到工具方法,newProxyInstance(p1,p2,p3)的第三个参数用到了匿名内部类。

顾名思义,匿名内部类没有显式的类名。因为没有名字,所以他只能使用一次,再次使用就需要再次创建一遍匿名类,因此匿名内部类一般是用在只是用一次的地方。
本质:匿名内部类隐式的继承一个类或者实现一个借口,换句话说,它是一个继承了该类或者实现该接口的子类匿名对象。
使用匿名内部类有个前提条件:必须继承一个父类或者实现一个接口。

格式:new 类名/接口/抽象类 () { }

实例:
1-1不使用匿名内部类

//抽象类
abstract class Person {
        public abstract void eat();
}

//Child类继承Person类并重写父类方法
class Child extends Person {

        public void eat() {
                System.out.println("吃冰激凌");
        }
}

public class BH {

        public static void main(String[] args) {
                Person p1 = new Child();
                p1.eat();
        }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
结果:

吃冰激凌
1
1-2 使用匿名类

//抽象类
abstract class Person {
        public abstract void eat();
}

public class BH {

        public static void main(String[] args) {
                //使用了匿名内部类创建对象
                Person p1 = new Person() {
                        public void eat(){
                                System.out.println("eat 冰机灵");
                        }
                };
               
                //调用方法
                p1.eat();
               
        }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
结果:

eat 冰机灵
1
省略了创建类的过程。

最常用的情况是用在多线程的实现上因为要实现多线程就必须继承Thread类或者实现Runnable接口。

2、接口和抽象类

在刚才关于内部类的过程中,遇到了抽象类和接口。在这里记录一下两者的区别。

接口:是一个规范,只管做什么,不管你怎么实现,就是一个对外提供有哪些功能的声明,你想用这些功能就去找实现它的子类,实现它的子类肯定会有相应的实现。
注意

a:接口中的所有属性默认为 public static final
b:接口中的所有方法默认为public abstract
c:关键字-implement
抽象类:

abstract修饰的类为抽象类,此类不能有对象(不能new)
abstract修饰的方法为抽象方法,该方法不能有方法体即大括号
抽象类中的抽象方法必须在子类中被重写
多态:类加载运行时父类的引用指向子类的对象;

抽象程度:接口 > 抽象类

抽象类和接口的区别

抽象类描述的是“是不是”的问题,比如Child是一个Person;而接口描述的是“有没有”的问题,类A实现(implement)接口B,则A里有B的功能
继承只能单继承;实现可以多实现,接口之间用逗号隔开
---------------------
【转载,仅作分享,侵删】
作者:海绵爱上星
原文:https://blog.csdn.net/zzyssg/article/details/88601003
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马