Android实例化和覆盖模式

时间:2014-08-28 07:14:00

标签: java android lambda

我不认为C#.net和C ++中存在这种OOP模式。那么这个模式或特征的名称是什么。我在编程Android时遇到过这种情况,这也是Java的一个特性吗?注意:我知道@Override仅适用于android编译器/ ide。

Foo bar = new Foo(){
    @Override
    public void fighters(){
          //some stuff
    }
};

这是Lambda的事吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这是Java中inner class的示例。这是一个匿名的内部类,其中

匿名类是一个根本没有名称的内部类。并且其实例在创建时创建。


阅读Anonymous Classes documentation了解更多详情。而Override是Java注释(不是特定于Android)。阅读When do you use Java's @Override annotation and why?


考虑以下示例

让我们声明一个接口HelloWorld,如下所示。

interface HelloWorld {
    public void greet();
    public void greetSomeone(String someone);
}

你想写一个扩展HelloWorld

的类
class TestClass implements HelloWorld {
    String name = "world";

    @Override
    public void greet() {
        greetSomeone("world");
    }

    @Override
    public void greetSomeone(String someone) {
        name = someone;
        System.out.println("Hello " + name);
    }
}

并将其实例化为

TestClass testClass = new TestClass();

这里代替上面两个步骤(声明一个类并实例化它),你可以声明一个匿名内部类,比如

HelloWorld testClass = new HelloWorld() {

    String name = "world";
    @Override
    public void greet() {
        greetSomeone("world");
    }
    @Override
    public void greetSomeone(String someone) {
        name = someone;
        System.out.println("Hello " + name);
    }
};

此处testClass是匿名内部类的对象,它实现HelloWorld