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