如何从Java的界面访问child的字段?
How to access child's field from the interface in Java?
Java 8 引入了 "default method" 允许描述方法的主体。
我想创建一个接口和两个 child 类。在接口 URL 中,我想要 getURL() 方法:
public interface URL {
int getURL() {
return this.myURL;
} // obviously
}
和两个 child 类 我想定义我的URL 字段:
public class MyURL1 implements URL {
private String myURL = "http://test1.com";
}
public class MyURL2 implements URL {
private String myURL = "http://test2.com";
}
将由 getURL 返回。
Java可以吗?
你想要的方式:
public interface URL {
int getURL() {
return this.myURL;
} // obviously
}
假设你有一个状态,这在接口中是不允许的,因此我认为你需要考虑使用抽象 类 来代替,例如:
public abstract class URL {
private String myUrl;
public URL(String url) {
this.myUrl = url;
}
public String getURL() {
return this.myURL;
} // obviously
}
然后
public class MyURL1 implements URL {
public MyURL1() {
super("http://test1.com");
}
}
不,这在 Java 中是不可能的。
下一个类似的东西是抽象的class:
abstract class UrlHolder {
private String url;
protected UrlHolder(String u) { url = u; }
public String getUrl() { return url; }
}
然后
class UrlHolder1 extends UrlHolder {
public UrlHolder1() {
super("myurl1");
}
}
class UrlHolder2 extends UrlHolder {
public UrlHolder2() {
super("myurl2");
}
}
Java 8 引入了 "default method" 允许描述方法的主体。
我想创建一个接口和两个 child 类。在接口 URL 中,我想要 getURL() 方法:
public interface URL {
int getURL() {
return this.myURL;
} // obviously
}
和两个 child 类 我想定义我的URL 字段:
public class MyURL1 implements URL {
private String myURL = "http://test1.com";
}
public class MyURL2 implements URL {
private String myURL = "http://test2.com";
}
将由 getURL 返回。
Java可以吗?
你想要的方式:
public interface URL {
int getURL() {
return this.myURL;
} // obviously
}
假设你有一个状态,这在接口中是不允许的,因此我认为你需要考虑使用抽象 类 来代替,例如:
public abstract class URL {
private String myUrl;
public URL(String url) {
this.myUrl = url;
}
public String getURL() {
return this.myURL;
} // obviously
}
然后
public class MyURL1 implements URL {
public MyURL1() {
super("http://test1.com");
}
}
不,这在 Java 中是不可能的。
下一个类似的东西是抽象的class:
abstract class UrlHolder {
private String url;
protected UrlHolder(String u) { url = u; }
public String getUrl() { return url; }
}
然后
class UrlHolder1 extends UrlHolder {
public UrlHolder1() {
super("myurl1");
}
}
class UrlHolder2 extends UrlHolder {
public UrlHolder2() {
super("myurl2");
}
}