我收到错误“抽象方法没有指定正文”,但代码如下....
DCWebView.setWebViewClient(new MyWebViewClient() {
@Override
public abstract void launchExternalBrowser(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
});
MyWebViewClient
是一个抽象类。我想知道上面的代码是做什么的。它显然打算定义类的函数...我可以在new MyWebViewClient() { }
中放置任何代码来定义变量和其他函数吗?
在这里可以做些什么其他很棒的事情?
答案 0 :(得分:6)
只需删除abstract
即可。如果launchExternalBrowser
中未定义方法MyWebViewCLient
,您还应删除@Override
注释。 @Override
表示您覆盖在扩展类层次结构中定义的方法。
DCWebView.setWebViewClient
方法需要类型为MyWebViewClient
的对象作为参数。通过编写new MyWebClient() { .. }
,您可以创建一个扩展MyWebViewClient
的匿名类的实例。
匿名类(几乎)与“普通”类相同。您可以在那里定义新的变量和方法。主要区别在于匿名类是在使用它的地方定义的(没有外部类定义,因为它没有名称,它是“匿名的”)并且它仅在这一个地方使用(如没有外部定义,不能在其他地方使用。)
匿名类在Java中非常常用,但这有点先进。作为esaj said,在他的回答中,阅读有关此事的一些信息是个好主意。网络上有大量信息,例如here或here。
答案 1 :(得分:2)
抽象方法用于定义没有实现的方法。从抽象类扩展的具体(非抽象)类必须实现扩展抽象类的抽象方法。定义方法的实现是在方法签名中没有abstract
- 关键字的情况下编写的。
您可能应该阅读有关抽象类和方法的Java SE教程:http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
我可以将任何代码放在新的MyWebViewClient(){}中进行定义 变量和其他函数?
是的,但还有另一个问题:因为看起来你将MyWebViewClient的“匿名”实现提供给另一个类(静态?)方法DCWebView.setWebViewClient(),DCWebView可能只知道在(抽象?)MyWebViewClient,并且不能访问任何其他方法,即使它们是公共的。但是,如果要分解MyWebViewClient的匿名实现以分离私有方法并在其中使用成员变量,则可以自由地执行此操作。