黑马程序员技术交流社区

标题: 关于接口成员变量的小疑惑。 [打印本页]

作者: yangfengxiao    时间: 2012-9-29 13:36
标题: 关于接口成员变量的小疑惑。
本帖最后由 yangfengxiao 于 2012-9-29 17:13 编辑

接口中的成员变量的默认修饰符:public static final
接口中的成员方法的默认修饰符:public abstract

其它都能理解,可为什么这个属性是 final呢。。。子类不是还要去实现吗。。。

新手~~
作者: 翁鹏    时间: 2012-9-29 13:51
接口中的方法并不是final的,子类可以去实现。接口中另一种成员是常量,所以隐含public static final 所有子类共享,初始化后不能被改变。
作者: 邓利军    时间: 2012-9-29 13:53
本帖最后由 邓利军 于 2012-9-29 14:38 编辑

final只是一个修饰符.
用final修饰成员变量,  意思是:此变量不再变化,是最终的值,是不可更改的.
它可以修饰方法,类,变量(包括居部变量,成员变量)
  final     修饰的类,不可以被继承,避免打破封装性.  有些类不想有子类的时候,要用到final
  final     修饰的方法,不可以被覆盖,因为他是最终的.
  final     修饰的变量,是一个常量,只能赋值一次,

  final  并没有去修饰接口,接口是用来实现的.
在接口中,public static final 是固定的句子,这固定句子修饰的是接口中的常量,而不是修饰接口. public static final 这固定句子一个单词都不能少,少一个编译能通过,它会自动帮你加上,最好要写全,不然一看,还以为是变量.   
接口只有常量,没有变量,因为变量通常要进行初始化,而接口中不需要或者说根本不可能出现构造函数.  
final是最终的意思,固定句子 public static final 中之所以有final 是想让其成为常量,不能有变量.
作者: yangfengxiao    时间: 2012-9-29 14:03
邓利军 发表于 2012-9-29 13:53
final只是一个修饰符.
用final修饰成员变量,  意思是:此变量不再变化,是最终的值,是不可更改的.
它可以修 ...

为什么接口中的变量会默认有final 你还是没解释啊
作者: 陈虹旭    时间: 2012-9-29 14:33
   final:最终,作为一个修饰符。
   
  (1)修饰类:不可被子类继承,防止重写 final class Demo
   (2)修饰函数:被final修饰的函数不能被重写 final void show()
   (3)修饰变量:被final修饰的变量是一个常量,有固定值,只能赋值一次,常量须大写:
      final double PI = 3.14;
      ##final既可修饰成员变量,也可修饰局部变量

   这是我对final的理解,final其实说白了就是最终,不能被改变了!所以不能继承,不能复写,不能再赋值。
   
   子类实现接口也只是重写接口中的非final的函数。
  
   同是新手,如有错请谅解哦,希望对你有帮助。      
作者: 李建强    时间: 2012-9-29 15:08
本帖最后由 李建强 于 2012-9-29 15:13 编辑
yangfengxiao 发表于 2012-9-29 14:03
为什么接口中的变量会默认有final 你还是没解释啊


首先,大道理不跟你讲了,别人讲的很多。
我只说:
接口是规范,规范的意思是:你是XX,就必须能XX。
类似于:你如果实现了人接口,就必须能像人一样吃饭。

如果一个类实现了接口,那么接口中的成员不能有歧义。
什么时候有歧义?
接口是静态的,接口中如果是变量,就可以直接接口名.变量名修改。
这次修改会造成很严重的后果,所有实现了这个接口的类都会改变。
这不是一个规范应该做的。

规范就像是“自由、平等”那些一样,
你可以抽象,但是你不能抽象中含有歧义。
这与面向接口编程的思想是相违背的,所以接口强制把变量变成常量。

总之,就是那么规定的就是了。
你想要修改的东西,不要放进接口中去,
对扩展开放,对修改关闭,接口是面向对象编程的开闭原则的体现。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2