java prettyprint-override">interface Super{
public static void doIt(){}
}
class Sub implements Super{
public void doIt(){}
}
class Super{
public static void doIt(){}
}
class Sub extends Super{
public void doIt(){}
}
原因是Java允许以非静态方式调用静态
方法。请考虑以下示例:
public class MyClass {
public static void sayHello() {
}
public void test() {
this.sayHello();
}
}
这将产生一个编译器警告(应该以静态方式访问MyClass
类型的静态方法sayHello()
),但它将在运行时正确编译和调用静态方法。
这就是为什么下面的代码不会编译,因为有一个二义性(MyClass类型中的重复方法test()
):
public class MyClass {
public static void test() {
}
public void test() {
}
}
public class MyClass {
public static void test() {
}
public void test() {
}
public void execute() {
this.test();
}
}
public class Super {
public static void test() {
}
}
public class Sub {
public void execute() {
this.test();
}
}
public class Sub {
public void execute() {
test();
}
}
其中调用this.test()
会产生警告,但在运行时会起作用。
对于接口中的static
方法,上面的示例将不起作用,因为编译器强制您以限定的方式调用接口的static
方法。以下内容将不起作用(未为类型Sub定义方法interfaceStatic()):
public interface Interface {
public static void interfaceStatic() {
}
}
public class Sub implements Interface {
public void test() {
interfaceStatic();
}
}
为了调用interfacestatic()
,必须对调用进行如下限定:
public class Sub implements Interface {
public void test() {
Interface.interfaceStatic();
}
}
但是,我也看到了一种奇怪的方法来重写接口方法: 3.子类只实现接口,但由父类重写接口中的方法: 覆盖接口方法的第三种方法在android框架源代码中非常常见,例如: 这样设计的原因是什么?
我是Visual Studio Xamarin的新手。在现有的xamarin android项目中,我必须添加一个Jar文件(SDK),所以我创建了一个绑定库,但是它引发了一些错误,我试图通过使用metadata.xml来解决这些错误,其中一个如下所示: 在api.xml中搜索,我发现了以下内容: 在接口中有这样的方法: 但是,当我搜索生成的类DeviceService.cs时,我发现了以下内容:
我正在尝试创建一个单例的访问方法。我得到这个错误(见下面的代码)。我不明白为什么会出现这个错误,以及这个错误的含义。有人能解释一下吗?
我在读有效的Java课本。第一项是关于使用静态工厂方法而不是公共构造函数。我的疑问是,如果我正在指定我如何在中指定静态工厂方法?因为Java不支持内部的静态方法。教材指定了如何创建包含公共静态工厂方法的不可实例化类。但是这些方法如何访问实现类的私有构造函数呢? 教材中说,如果要定义,请创建一个不可实例化的类,并在该类中包含静态工厂方法。但是类中定义的方法如何访问具体实现的私有构造函数 编辑:-以下
我尝试对多个元素使用视图转换,但遇到了这个错误:静态成员“transition”不能用于“UIView”类型实例。我读过类似的讨论,但无法在我的案例中实现它们。你能帮帮我吗? 下面是我的代码:
我试图通过visual Studio中的android绑定库将clover.aar文件绑定到xamarin。我把它归结为两个错误: “Decimal”不实现接口成员“icomparable.comapreto(对象)”