匿名内部类那点事
来源:互联网 发布:笑气在淘宝怎么搜 编辑:程序博客网 时间:2024/05/17 06:02
1、什么是匿名内部类呀?
答:简单粗暴起来,之前说过内部类有一种是匿名的,就是没有名字的内部类嘛哈哈,然后直接就搞出一个实例对象啦。。
2、匿名内部类(又是偷懒的杰作啦,人总是懒懒的)
答:为什么这么说昵? 抽象类、接口都没有办法直接生成实例对象。单写一个类继承抽象类或者写一个类实现一个接口,而且我们只用一次……感觉大才小用的感觉,因为我们只需要一个实例对象而已啊!!!
a、第一种:被扩展的是抽象类的运用
我们先写一个抽象类Person
public abstract class Person {public abstract void walk();}再写一个入口类Main(采用匿名内部类)
public class Main {public static void main(String args[]) {justDoit(new Person(){ //这里我们调用justDoit方法,使用匿名内部类直接生成一个继承Person的实例对象@Overridepublic void walk() {System.out.println("just walk()");}});}public static void justDoit(Person person) { //类方法,接受一个Person类型的实例对象(传送引用过来就ok)person.walk(); //马上我们调用了person的walk()方法}}
对比的另外一个Main类(上面匿名内部类的完整形式)加深理解:将匿名内部类看作是简写形式,使用与定义合并在一起,人总是喜欢简洁,所以就有这样的语法。
public class Main {public static void main(String args[]) {justDoit(new MyPerson()); //new一个MyPerson的实例对象(也可以叫匿名对象:<span style="font-family: Arial, Helvetica, sans-serif;">没有将其赋值给引用,记得中文博大精深哦)</span>} private static class MyPerson extends Person { //这里用的静态内部类,因为上面用在静态方法上(知识点:静态成员比普通成员优先初始化)@Overridepublic void walk() {System.out.println("walk on");}}public static void justDoit(Person person) {person.walk();}}
b、第二种:被扩展的是接口的运用
先写一个接口MyInterface
public interface MyInterface {public abstract String printName();}
匿名内部类(接口版本)
public class Bird {private void smaName(MyInterface who) {System.out.println(who.smallName());}public void init() {smaName(new MyInterface(){ //interface可生成不了实例对象,直接它的实现类搞一个实例对象出来,这里也是匿名内部类的运用哦@Overridepublic String smallName() { //直接这里重写抽象方法return "小鸟";}});}}
再对比一下完整版本的实现方式
public class Bird {private void smaName(MyInterface who) {System.out.println(who.smallName());}public void init() {smaName(new Name());}class Name implements MyInterface {@Overridepublic String smallName() {return "小鸟";}}}
0 0
- 匿名内部类那点事
- 内部类/内部接口那点事
- 匿名内部类的几点说明
- 内部类、匿名内部类
- 内部类、匿名内部类
- 内部类,匿名内部类
- 内部类(匿名内部类)
- 内部类 ---匿名内部类
- 内部类,匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类、内部类、匿名内部类
- 匿名类,内部类,匿名内部类
- 匿名内部类,回调...
- 关于匿名内部类
- 匿名内部类
- JAVA匿名内部类
- 返回匿名内部类
- iOS多线程之GCD学习
- JAVA——常见IO流的使用
- 45度斜角地图菱形坐标转换
- POJ 1797 Heavy Transportation
- linux下手动build spark1.6.0
- 匿名内部类那点事
- 哈夫曼树结构体数组生成方法
- 游戏地图中两点坐标相对的方向(角度)判断
- 斜45度地图简介、坐标系转换以及数据碰撞
- JavaScript中数组类型的常用操作方法以及属性
- Masonry自动计算cell行高:HYBMasonryAutoCellHeight
- Android Studio——通过java.net.URLConnection发送HTTP请求的方法
- Spring Security(20)——整合Cas
- Masonry自动布局详解一:基本用法