我想知道是否可以将方法的参数设置为Object,它必须是一个扩展的类并实现另一个类.这是一个例子:假设我有一个名为ClassA的类和一个名为MyInterface的接口.
public class ClassA {
/* code */
}
public interface MyInterface {
/* code */
}
Run Code Online (Sandbox Code Playgroud)
让我们说其他地方有一个名为ClassB的类,它们都扩展了ClassA并实现了MyInterface.
public class ClassB extends ClassA implements MyInterface {
/* code */
}
Run Code Online (Sandbox Code Playgroud)
我也可以有一个ClassC,它还扩展了ClassA并实现了MyInterface:
public class ClassC extends ClassA implements MyInterface {
/* code */
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
假设我有一个名为method1的方法,在method1中我希望有一个接受Object的参数.假设我希望这个Object要么是ClassA的子类,要么实际上是ClassA本身.这很容易做到:
public void method1(ClassA parameter) {
}
Run Code Online (Sandbox Code Playgroud)
假设我也想要一个方法2,并且在方法2中我想要一个接受任何实现MyInterface的参数的参数.同样,这很容易:
public void method2(MyInterface parameter) {
}
Run Code Online (Sandbox Code Playgroud)
但是如果我想要一个method3,并且我希望有一个参数只接受ClassA的子类或ClassA本身,并且实现MyInterface,那么接受ClassB和ClassC,但不接受任何只扩展ClassA的类,或者只实现MyInterface,或者两者都不实现.喜欢:
public void method3 ([Something that extends ClassA implements MyInterface] parameter) {
/* code */
}
Run Code Online (Sandbox Code Playgroud) 我有这个问题,我想只在if块之后返回一个接口和实现类的列表.
public interface Lotto { }
public class LottoImplSecond implements Lotto { }
public class LottoImplFirst implements Lotto { }
public class MyClass {
public List<Lotto> getLotto(Integer number){
if(number==1) List<Lotto> listaLotto=new ArrayList<LottoImplFirst>();
else if(number==2) List<Lotto> listaLotto=new ArrayList<LottoImplSecond>();
return listaLotto;
}
Run Code Online (Sandbox Code Playgroud) 这是关于oop接口的唯一问题我似乎无法完全解释.那么,为什么在oop中一个类可以实现多个接口?
如果你能提供一些很棒的例子.提前致谢.
如何实现接口并将类扩展到同一个类?
这似乎不起作用(接口根本没有实现):
public class StrongChecker extends BasicChecker implements Checker {
Run Code Online (Sandbox Code Playgroud)
这也不起作用(接口根本没有实现):
public class StrongChecker extends BasicChecker {
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
public class StrongChecker implements Checker extends BasicChecker {
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助 !
这里只是一个简单的语言设计相关问题.在像Swift这样的语言中,为了使struct/class符合协议/接口,需要明确地将其声明为
struct Dog: Animal {
// implementation of Animal protocols here
}
Run Code Online (Sandbox Code Playgroud)
但是为什么在Go中,没有明确的方法来显示结构符合的接口?
这不仅仅是让事情不清楚,还是有任何其他原因呢?
我在这里阅读此链接,在此处输入链接描述,以了解State Desing Patern.
接口类:
public interface State {
void doAction();
}
Run Code Online (Sandbox Code Playgroud)
onState类:
public class TVStartState implements State {
@Override
public void doAction() {
System.out.println("TV is turned ON");
}
}
Run Code Online (Sandbox Code Playgroud)
截止态:
public class TVStopState implements State {
@Override
public void doAction() {
System.out.println("TV is turned OFF");
}
}
Run Code Online (Sandbox Code Playgroud)
TvContext类:
public class TVContext implements State {
private State tvState;
public void setState(State state) {
this.tvState=state;
}
public State getState() {
return this.tvState;
}
@Override
public void doAction() { …Run Code Online (Sandbox Code Playgroud) 开始了,
我有一个标记界面:
interface IPOJO {
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个实现此接口的类:
class MePOJO implements IPOJO {
}
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个class objectMePOJO类的持有参考:
Class<MePOJO> classObj = MePOJO.class;
Run Code Online (Sandbox Code Playgroud)
那么如何确定MePOJO类是否IPOJO只是通过使用来实现classObj?
我注意到 MSDN 对“继承”和“实现”这两个术语非常小心。
我们实现了接口,但继承了非抽象类。我想抽象类的完整方法是继承的,但抽象方法是实现的。
我有几个路由只不过是一个静态页面。
在这些路由中的每一个(超过 50 个)上,当路由启动时,我必须在两个不同的服务上调用几个方法(以及更多)。
一个简单的工作解决方案是在每个页面上调用 ngOnInit 方法并调用上述方法。
问题是这意味着在 50 个不同的文件中复制和粘贴相同的代码。复制粘贴不好,不可维护。
举个例子:
我有页面“FAQ”(手动分配的 id:52)和页面“Find Us”(手动分配的 id:13)。这是2条不同的路线。
我有“编辑器”服务,用于从管理面板编辑这些页面,它需要跟踪我看到的页面。
我有“缓存”服务,它检查页面之前是否已经查询到后端,或者是否需要从服务器中提取。
这两个服务都想知道我手动分配给该路由的 ID。
此特定情况下的 ID 用于查询数据库/API,但是此详细信息不是以问题为中心的,不应使其他有类似问题的人的答案无效。
// Page FAQ
id: number
constructor() {
this.id = 52; // 52 is the id that I assigned to the page FAQ
}
ngOnInit () {
editorService.keepTrack(this.id);
editorService.moreMethod().notMaintainable().whatIfIChangeSomething(this.id/0);
cacheService.keepTrack(this.id);
}
// Page Find Us
id: number
constructor() {
this.id = 13; // 13 is the id that I assigned to the page Find Us
}
ngOnInit () { …Run Code Online (Sandbox Code Playgroud) 我有一个通用的接口来描述对输出流的访问,如下所示:
interface IOutput {
function writeInteger(aValue:Int):Void;
}
Run Code Online (Sandbox Code Playgroud)
我有一个基于标准haxe.io.BytesOutput类的接口的抽象实现:
abstract COutput(BytesOutput) from BytesOutput {
public inline function new(aData:BytesOutput) {
this = aData;
}
public inline function writeInteger(aValue:Int):Void {
this.writeInt32(aValue);
}
}
Run Code Online (Sandbox Code Playgroud)
尽管此抽象确实实现了上面描述的接口,但没有直接引用接口,当我尝试像这样使用它时:
class Main {
public static function out(aOutput:IOutput) {
aOutput.writeInteger(0);
}
public static function main() {
var output:COutput = new BytesOutput();
out(output); // type error
}
}
Run Code Online (Sandbox Code Playgroud)
编译器将引发错误:COutput should be IOutput。我只能通过使用包装BytesOutput和实现的通用类来解决此问题IOutput。
我的问题是如何向Haxe编译器表明抽象实现了该接口。