这两个接口似乎都在比较对象是否相等,那么它们之间的主要区别是什么?
是否可以在界面中创建内部类?如果有可能我们为什么要创建这样的内部类,因为我们不打算创建任何接口对象?
这些内部类有助于任何开发过程吗?
我想知道instanceofJava 中运算符的以下行为.
interface C {}
class B {}
public class A {
public static void main(String args[]) {
B obj = new B();
System.out.println(obj instanceof A); //Gives compiler error
System.out.println(obj instanceof C); //Gives false as output
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?interface C和之间没有关系class B,但是它给出了假,而在obj instanceof A它出现编译错误的情况下?
如果我有两个接口,两者的用途完全不同,但是使用相同的方法签名,我如何在不强制编写一个为两个接口服务的单个方法并在方法中编写一些复杂逻辑的情况下创建一个类.检查正在进行调用的对象类型并调用正确代码的实现?
在C#中,这被称为显式接口实现所克服.Java中有没有相同的方法?
不久前我问了一个关于隐式接口变量的类似问题.
这个问题的来源是我的代码中的一个错误,因为我没有意识到编译器创建的隐式接口变量的存在.拥有它的过程完成后,该变量已完成.这反过来导致了由于变量的生命周期比我预期的更长的错误.
现在,我有一个简单的项目来说明编译器的一些有趣的行为:
program ImplicitInterfaceLocals;
{$APPTYPE CONSOLE}
uses
Classes;
function Create: IInterface;
begin
Result := TInterfacedObject.Create;
end;
procedure StoreToLocal;
var
I: IInterface;
begin
I := Create;
end;
procedure StoreViaPointerToLocal;
var
I: IInterface;
P: ^IInterface;
begin
P := @I;
P^ := Create;
end;
begin
StoreToLocal;
StoreViaPointerToLocal;
end.
Run Code Online (Sandbox Code Playgroud)
StoreToLocal编译就像你想象的那样.局部变量I(函数的结果)作为隐式var参数传递给Create.通过StoreToLocal一次通话即可获得整齐的结果IntfClear.没有惊喜.
但是,StoreViaPointerToLocal对待方式不同.编译器创建一个传递给它的隐式局部变量Create.当Create返回时,对分配P^进行.这使例程中有两个局部变量保存对接口的引用.StoreViaPointerToLocal两次调用结果的整理结果IntfClear.
编译后的代码StoreViaPointerToLocal是这样的:
ImplicitInterfaceLocals.dpr.24: begin
00435C50 55 …Run Code Online (Sandbox Code Playgroud) 我想知道什么时候应该使用接口.
让我们考虑以下事项:
public abstract class Vehicle {
abstract float getSpeed();
}
Run Code Online (Sandbox Code Playgroud)
并且:
public interface IVehicle {
float getSpeed();
}
Run Code Online (Sandbox Code Playgroud)
我可以很容易地实现它们,它们具有相同的功能......但是我也可以在我的车辆类中添加一些变量,这些变量可能应该用在车辆中(maxSpeed,carType ......)
使用接口的原因是什么?
谢谢!
编辑:我在另一个帖子中找到了一个很好的链接:http://www.thecoldsun.com/en/content/01-2009/abstract-classes-and-interfaces
我似乎记得读过一些关于结构通过C#在CLR中实现接口有什么不好的东西,但我似乎无法找到任何关于它的东西.这不好吗?这样做会产生意想不到的后果吗?
public interface Foo { Bar GetBar(); }
public struct Fubar : Foo { public Bar GetBar() { return new Bar(); } }
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序作为具有许多依赖项的JAR文件.出于某种原因,我需要反编译其中一个库并使用Eclipse打开它.对于项目中的给定接口,有没有办法找到实现它的类?可能是接口在我尚未反编译的其他库中实现的情况.是否有可能为这类课程做到这一点?
我正在为iPhone构建一个应用程序,它将显示即将到来的和过去的事件.我找到了列表视图,但后来我意识到日历(就像内置日历应用程序中"月"视图中显示的日历)将是最佳匹配.
但是,iPhone人机界面指南只提到了日期选择器,而不是日历,所以我相信没有任何开箱即用的东西.真的吗?如果是这样,有没有人知道可以使用的第三方控件?(我可以自己写一个,但我宁愿准备一些东西,因为这是对原始项目计划的偏离).
interface ×10
java ×5
c# ×3
inheritance ×2
oop ×2
calendar ×1
class ×1
class-design ×1
cocoa-touch ×1
composition ×1
delphi ×1
delphi-2010 ×1
eclipse ×1
icomparable ×1
iequatable ×1
instanceof ×1
iphone ×1
struct ×1
uikit ×1