可以重新初始化接口变量吗?

时间:2015-09-02 06:03:36

标签: java interface static final

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 给我打电话

5 个答案:

答案 0 :(得分:5)

您没有重新初始化变量,但是隐藏它。

要访问abs的{​​{1}}成员,您必须使用接口名称来引用它。类似的东西:

a

答案 1 :(得分:1)

因为你再次声明了变量

@RequestParameter UUID patientUuid

所以看看你想要的错误

在你的课堂上这样做

int a =11;

在您的情况下,a是属于B类的全新变量

答案 2 :(得分:0)

在课程- (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { [self initialize]; } return self; } - (id)initWithCoder:(NSCoder *)aDecoder { if ((self = [super initWithCoder:aDecoder])) { // Initialization code } return self; } - (void) awakeFromNib { [super awakeFromNib]; } - (void) layoutSubviews { for (UIView *view in self.subviews) { [view removeFromSuperview]; } [self initialize]; } - (instancetype)init { self = [super init]; if (self) { self = [self initWithFrame:self.frame]; } return self; } -(void)initialize { CALayer *border = [CALayer layer]; CGFloat borderWidth = 2; border.borderColor = [UIColor grayColor].CGColor; border.frame = CGRectMake(0, self.frame.size.height - borderWidth, self.frame.size.width, self.frame.size.height); border.borderWidth = borderWidth; [self.layer addSublayer:border]; self.layer.masksToBounds = YES; } 中初始化abs.a时,您不会修改a的值。字段B只是隐藏了界面中继承的B.a。您仍然可以使用完全限定名称a从类abs.a中的代码到达B

答案 3 :(得分:0)

不,您无法重新初始化接口变量。 您的实现类中的变量不是接口变量A,而是B类'实例变量。如果要访问Interface变量,请将其引用为abs.A

答案 4 :(得分:0)

您实际在做的是通过在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