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
版权声明:本文为博主原创文章,转载请附上博文链接!
|
|