[英]Can somebody please give me a code example of how to implement the DTO and DAO concept at the same time?
[英]Why this code give me compile Time error using Interface and how i can implement this code? Please Explain?
有两个接口,并且具有最终变量。
interface abc {
int a = 10;
public void display();
}
interface xyz {
int a = 20;
public void display();
}
public class NewClass implements abc, xyz {
public NewClass() {
System.out.println(a);
}
public static void main(String[] args) {
NewClass obj = new NewClass();
obj.display();
}
@Override
public void display() {
System.out.println("hello");
}
}
您正在向构造函数变量a
引用未知数。 你必须做:
System.out.println(xyz.a);
要么
System.out.println(abc.a);
这取决于确切a
你想打印。
该字段a模棱两可,您无法实现2个相同的字段。 另外-接口变量默认为静态和最终变量。 您甚至不需要将它们设置为静态final。
由于在NewClass
实现的两个接口中都存在对a
引用,因此模棱两可。
要解决此问题,您需要指定要引用的变量。
使用System.out.println(abc.a)
引用abc
接口中的变量或使用System.out.println(xyz.a)
引用xyz
这是死亡的钻石
由于Compiler不够聪明,无法知道要访问哪个最终变量,除非您告诉他要使用哪个接口的final
变量。
您必须这样指定
System.out.println(xyz.a);
要么
System.out.println(abc.a);
a是“模棱两可”的。 它可以属于xyz或abc。 这就是编译器尖叫的原因 。
看到,在此代码中:
public NewClass() {
System.out.println(a); // a is "ambiguous". It could belong to either xyz or abc. That's why the compiler screams
}
更改您的代码以指定必须使用哪个接口。
public NewClass() {
System.out.println(xyz.a);
}
多数民众赞成在名称空间冲突。
如果接口做类似的事情,则应该彼此扩展。 如果不是,则应使用不同的方法命名。
interface abc {
public void display();
}
interface xyz extends abc {
int a = 20;
}
另外,如果接口中的默认方法并非严格要求公共字段,则不应在接口中定义它们,而应在实现类中定义它们。 否则给他们一个适当的唯一名称。
或像这样访问变量/方法:
public NewClass() {
System.out.println(xyz.a);
}
但我认为这是不好的做法。
如果要使用接口abc
或xyz
变量“ a”,则在NewClass
类中没有任何变量“ a”,
public NewClass() {
System.out.println(abc.a);
}
要么
public NewClass() {
System.out.println(xyz.a);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.