C# 'da, aynı yöntemle iki temel arabiriminiz varsa (örneğin, F()), farklı uygulama gerçekleştirmek için açık uygulamayı kullanabilirsiniz. F() için. Bu, mevcut bakış açısına karşılık gelen nesneyi farklı şekilde ele almanızı sağlar: IMyInterface1 veya IMyInterface2 olarak. Java'da bu mümkün mü?Java'da mevcut arabirimin C# "açık uygulaması" mı?
cevap
Hayır, Java'da C# 'nin açık arabirim uygulaması gibi bir şey yok.
Artı tarafında, Java'nın kovariant dönüş türleri vardır, bu nedenle, arabirim belirttiğinden daha güçlü bir şekilde yazılan bir uygulama sağlamak istiyorsanız, sorun yok.
interface Foo
{
Object getBar();
}
public class Test implements Foo
{
@Override
public String getBar()
{
return "hi";
}
}
C# o izin vermeyeceğini - ve çevresinde yollarından biri genellikle arayüz uygulaması tarafından çağrılan daha spesifik bir kamu yöntemi (açıkça arabirimini uygulamak ve daha sonra olması genellikle: Örneğin, bu gayet).
Yalnızca yöntemler aşırı yüklenmişse bunu yapabilirsiniz. Farklı şeyler yapması beklenen iki yönteme sahipseniz, bunların farklı isimleri IMHO olmalıdır.
Hayır ve hiçbir zaman Java'da bulunmamalıdır. İyi tasarımla uğraşamayan insanlara atmak sadece bir kemik. Bir arabirimin açık olarak uygulanması kesinlikle gerekli olmamalı veya kullanılmamalıdır. Bu, çözmeye çalıştığı sorunu çözmek için daha iyi yollar vardır.
Java'da anonim arabirim uygulamasıyla benzer efektler elde edebilirsiniz.
örneğe bakın:
interface Foo {
void f();
}
interface Bar {
void f();
}
public class Test {
private String foo = "foo", bar = "bar";
Foo getFoo() {
return new Foo() {
@Override
public void f() {
System.out.println(foo);
}
};
}
Bar getBar() {
return new Bar() {
@Override
public void f() {
System.out.println(bar);
}
};
}
public static void main(String... args) {
Test test = new Test();
test.getFoo().f();
test.getBar().f();
}
}
ayrıca özel miras sadece "iyi tasarımı ile rahatsız olamaz insanlar" için olduğunu inanıyor musunuz? Java'dan eksik olan başka bir kullanışlı OOP özelliği. –
Java'da asla hiçbir zaman Java'da olmayacak. Delegelerin asla Java'da bulunmayacağı .. google. Java'da hiç yapılmayan delegelerin neden bu kadar iyi olduğu hakkında iyi bir yazı var. Bu, onunla yapabileceğiniz iyi şeyleri yapmamanızı sağladığı için kötüdür. Microsoft ve ekosistem bir şey alamadım. – eaglestorm
@ealgestorm, Swing'in bile kendilerini delegeler gibi davranmasını sağlamak için “suistimal” ettiğini fark ettiniz, değil mi? Ayrıca, hemen hemen tüm sorularınızın .NET ile ilgili olduğunu biraz eğlenceli buluyorum. –