可以重新初始化接口变量吗?
Can an Interface variable be reinitialised?
interface abs{
int a=10;// by default final static
void callme();
}
class B implements abs{
int a =11;// reinitializing
void call()
{
System.out.println("No problem"+a);
}
public void callme()
{
System.out.println("Call me"+a);
}
}
class main{
public static void main(String args[]){
B m=new B();
m.call();
m.callme();
}
}
在 Herbert Schildt 的书中,我读到接口变量默认为 Final 和 static。这隐含地意味着它将像常量一样起作用。但是当我在上面提到的代码中为变量 a 分配 11 时,它没有给出任何错误。
o/p
没问题11
叫我11
您没有重新初始化变量,而是隐藏了它。
为了访问 abs
的 a
成员,您必须使用接口名称引用它。类似于:
System.out.println("No problem" + abs.a);
在 class B
中初始化 a
时,您并未修改 abs.a
的值。字段 B.a
只是从界面中隐藏了继承的 a
。您仍然可以使用完全限定名称 abs.a
.
从 class B
中的代码访问 abs.a
因为你又声明了变量
int a =11;
所以看到你想要的错误
在您的 class
中执行此操作
a=11;
在你的例子中,a 是一个属于 class B
的全新变量
不,你不能重新初始化接口变量。你实现中的变量Class不是接口变量A , 但 B class' 实例变量。如果要访问接口变量,请将其引用为 abs.A
你实际上在做的是通过在 class B 中声明一个同名变量来隐藏接口中的变量。你可以使用以下代码验证它:
public interface Abs {
int a=10;// by default final static
void callme();
default void printA() {
System.out.println("A in interface: " + a);
}
}
public class B implements Abs {
int a =11;// reinitializing
void call()
{
System.out.println("A in class: "+a);
}
public void callme()
{
printA();
}
}
那么我们有:
public static void main(String[] args){
B m=new B();
m.call();
m.callme();
}
它打印:
A in class: 11
A in interface: 10
interface abs{
int a=10;// by default final static
void callme();
}
class B implements abs{
int a =11;// reinitializing
void call()
{
System.out.println("No problem"+a);
}
public void callme()
{
System.out.println("Call me"+a);
}
}
class main{
public static void main(String args[]){
B m=new B();
m.call();
m.callme();
}
}
在 Herbert Schildt 的书中,我读到接口变量默认为 Final 和 static。这隐含地意味着它将像常量一样起作用。但是当我在上面提到的代码中为变量 a 分配 11 时,它没有给出任何错误。
o/p 没问题11 叫我11
您没有重新初始化变量,而是隐藏了它。
为了访问 abs
的 a
成员,您必须使用接口名称引用它。类似于:
System.out.println("No problem" + abs.a);
在 class B
中初始化 a
时,您并未修改 abs.a
的值。字段 B.a
只是从界面中隐藏了继承的 a
。您仍然可以使用完全限定名称 abs.a
.
B
中的代码访问 abs.a
因为你又声明了变量
int a =11;
所以看到你想要的错误
在您的 class
中执行此操作a=11;
在你的例子中,a 是一个属于 class B
的全新变量不,你不能重新初始化接口变量。你实现中的变量Class不是接口变量A , 但 B class' 实例变量。如果要访问接口变量,请将其引用为 abs.A
你实际上在做的是通过在 class B 中声明一个同名变量来隐藏接口中的变量。你可以使用以下代码验证它:
public interface Abs {
int a=10;// by default final static
void callme();
default void printA() {
System.out.println("A in interface: " + a);
}
}
public class B implements Abs {
int a =11;// reinitializing
void call()
{
System.out.println("A in class: "+a);
}
public void callme()
{
printA();
}
}
那么我们有:
public static void main(String[] args){
B m=new B();
m.call();
m.callme();
}
它打印:
A in class: 11
A in interface: 10