黑马程序员技术交流社区

标题: 匿名内部类 [打印本页]

作者: 汪平乐    时间: 2013-5-8 15:58
标题: 匿名内部类
本帖最后由 汪平乐 于 2013-5-9 09:05 编辑

想输出开不同的车,但在这里卡了半天,请大虾帮吗!
  1. class Car{
  2.     void driveCar(Bus bus){}
  3. }
  4. interface Bus{
  5.     void driveBus();
  6. }
  7. class Test{
  8.     static void drive(){
  9.         Car car = new Car();
  10.         car.driveCar(new Bus(){ //参数类型的匿名内部类
  11.             public void driveBus(){
  12.                 System.out.print("开不同的车");
  13.             }
  14.         });
  15.     }
  16. }
  17. class Run{
  18.     public static void main(String[] args){
  19.         Test.drive();
  20.     }
  21. }
复制代码

作者: 殇_心。    时间: 2013-5-8 16:12
class Car{

    void driveCar(Bus bus){ bus.driveBus();}   //调用开车方法。其它地方不用改

}
作者: zms2100    时间: 2013-5-8 16:26
好吧,LZ,我只能这样: (期待其他大神来解决你,不过能解决LZ这种思路的应该不会太多,O(∩_∩)O~,开玩笑啊,最近常一个人面对电脑泡论坛什么的挺无聊的,所以喜欢调侃人,O(∩_∩)O~)。
说问题,1、实现 interface Bus接口,或者说创建它的匿名内部类,然后直接调用复写的方法(这个不说了,应该懂);
2、参数类型的匿名内部类,这个我真心不懂能这样用,我最近学到的应该只有 接口类型比较器(也就是创建实现comparator的匿名内部类,不过将它传给TreeSet等集合) 或者是 文件比较器(自己起的名字,File类中的listFiles(FileFilter filter) 方法),也是直接实现FileFilter接口的匿名内部类。
3、传奇版坑人的方法如下 : (这样就肯定能输出那就话)
————————————
package hehe;
import java.util.ArrayList;
class Car{
    void driveCar(Bus bus){                System.out.print("开不同的车");   }
}
interface Bus{
    void driveBus();
}
class Test{
    static void drive(){
        Car car = new Car();
        car.driveCar(new Bus(){ //参数类型的匿名内部类
            public void driveBus(){}  });
    }
}
class MathDemo{
    public static void main(String[] args){
        Test t = new Test();
        t.drive();
    }
}
作者: zms2100    时间: 2013-5-8 16:35
沙发已出现大神了,O(∩_∩)O~............
我的回答你就当学习常用的参数类型匿名内部类的情况吧。
作者: liuelxiwd    时间: 2013-5-8 18:22
看了半天有点乱,那个匿名内部类new Bus()真的可以么,Bus不是个接口么,怎么能定义对象呢
作者: 曹睿翔    时间: 2013-5-8 23:59
问题解决请编辑改为已解决,有疑问可以继续追问
作者: 汪平乐    时间: 2013-5-9 09:02
殇_心。 发表于 2013-5-8 16:12
class Car{

    void driveCar(Bus bus){ bus.driveBus();}   //调用开车方法。其它地方不用改

能告诉我为什么吗?为什么我不能再主函数中调用...主函数能调用的话怎么弄,小弟愚昧!
作者: 汪平乐    时间: 2013-5-9 09:07
zms2100 发表于 2013-5-8 16:26
好吧,LZ,我只能这样: (期待其他大神来解决你,不过能解决LZ这种思路的应该不会太多,O(∩_∩)O~,开玩笑 ...

你LS的方法调用可以....不过还是要谢谢
作者: zms2100    时间: 2013-5-9 09:29
汪平乐 发表于 2013-5-9 09:07
你LS的方法调用可以....不过还是要谢谢

O(∩_∩)O~.......我懂的,就是不能通过复写那个接口,输出不同的语句,沙发的答案确实很简朴、实用。
作者: zms2100    时间: 2013-5-9 09:34
汪平乐 发表于 2013-5-9 09:02
能告诉我为什么吗?为什么我不能再主函数中调用...主函数能调用的话怎么弄,小弟愚昧! ...

因为你传进去的是作为参数,而沙发(一楼)给的答案就是让接收参数的方法自动处理那个参数,这个跟我说的比较器(匿名内部类是一样的),主函数应该是不能直接操作作为参数的动作,所以我LS的回答第一条才建议你复写那个接口,然后直接调用。(这是两种不同的做法)
作者: 汪平乐    时间: 2013-5-9 10:19
zms2100 发表于 2013-5-9 09:34
因为你传进去的是作为参数,而沙发(一楼)给的答案就是让接收参数的方法自动处理那个参数,这个跟我说的比 ...

收到,谢谢!我QQ358998716
作者: 殇_心。    时间: 2013-5-9 10:22
汪平乐 发表于 2013-5-9 09:02
能告诉我为什么吗?为什么我不能再主函数中调用...主函数能调用的话怎么弄,小弟愚昧! ...

也可以。但你这样写。 我只能按着你的改了。
作者: 汪平乐    时间: 2013-5-9 10:58
殇_心。 发表于 2013-5-9 10:22
也可以。但你这样写。 我只能按着你的改了。

那你帮忙优化下....:handshake
作者: 殇_心。    时间: 2013-5-9 18:02
汪平乐 发表于 2013-5-9 10:58
那你帮忙优化下....

那个class Car 实现接口  Bus   不就行了?
不是太懂楼主你的要求。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2