今天碰到这个问题时候,还真不好理解,只知道interface中的变量默认是被public static final 修饰的,接口中的方法是被public和abstrct修饰的。查阅了很多资料,做了些例子,得出以下结论,不足的地方希望大家指出。
/*
* 关于抽象类和接口
*
* 1.定义变量时
* 抽象类定义的变量可以不被赋值。
*
* 接口中定义的变量(确切的说应该是常量)必须被赋值(final)。
*
* 2.定义方法时
*
* 抽象类中定义的方法,可以指定程序体也可以不指定。
* 程序员可以在非抽象方法中指定程序体 ,与其他普通类中的方法类似。
* 但在抽象方法中,必须不指定程序体(写程序体会报出:Abstract methods do not specify a body的错误),与接口中定义方法的形式很类似。
*
* 接口中的方法,所有方法都默认的是抽象的,所以必须不指定程序体。
*
* 3.设计初衷
*
* 抽象类是被java设计用来实现继承的。
* 接口是用来做多重继承的一个特例。
*
* 4.is a 和 like a(还需要再看看)
*/
public abstract class AbstratClassTest {
String name ;
//被final的变量,但不能指定一个有效的set方法(final作用的原因),没有体现封装的闭合原则。
final static int age =1;
// public void setAge(){
// this.age = 2;
// }
public static int getAge() {
return age;
}
public void test(){
}
public abstract void test1();
}
/*
* 为什么接口中的变量都用final修饰(常量)
* 因为接口本身就是用来定义一个标准、规范,是用来设计用户可用的细节(public)且不能随意更改的(final)
* 那么接口中的任何东西都应该被定义成统一,那么定义的数值应该是常量
* 再次思考:假如接口中可以定义非final,而仅仅是public和static修饰的,那么被实现的类可以随便修改(实现类中的static块中),这样会造成标准不统一
* (是不是有点牵强附会?)。
*
* 接口还是不要随意更改,如果可以随意更改会造成很大的麻烦,比如一个接口被很多类实现,那么修改接口后,还必须修改实现类,麻烦程度不言而喻。
*/
public interface InterfaceTest {
String name = "Tom";
public static final int age = 2;
public void test();
public abstract void test1();
}
例证、反证:银行的提款机
银行的提款机中的插卡口可以看做是一个接口,所有的提款机插卡口是被统一的标准(大小尺寸)所约束的,方便每个卡可以插入各个提款机中。假如可以随便修改插卡口接口的数值,某行在当地修改了插卡口的尺寸,当你去提款机取钱,却发现插卡口小了点,那么......
由上例得出,将接口中的数值定义成常量是有意义的。并且证明了此时用接口比用抽象类好些。
结论:因为接口本身就是用来定义一个标准、规范,是用来设计用户可用的细节且不能随意更改的,统一的值,所以用final来修饰是最好不过的。
参考文献:
1.http://forums.sun.com/thread.jspa?threadID=741407&messageID=4251167
2.http://www.7880.com/Info/Article-538dc540.html
分享到:
相关推荐
本文章是关于final部分知识所作的自我总结,内容为final对成员变量和局部变量修饰的简要解答,除了对自我java学习的一个小结,也希望能够帮助到在java路上对该内容疑惑的同行
day11_05_final关键字用于修饰成员变量
final修饰变量时,表示该变量一旦获得了初始值之后就不可被改变,final既可修饰成员变量(包括类变量和实例变量),也可以修饰局部变量,形参。 final修饰成员变量 类变量:当类初始化时,系统会为类变量分配内存,...
012-JavaSE进阶-final修饰局部变量
Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释.doc
day11_04_final关键字用于修饰局部变量
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.
用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。 注:类的private方法会隐式地被指定为final方法。 public class ...
计算机后端-Java-Java核心基础-第15章 面向对象07 26. final修饰局部变量.avi
本文通过实例向我们展示了java中final修饰符的概念,final修饰的基本变量和引用类型变量的区别。有需要的小伙伴可以参考下
4.2 final修饰符;4.2 final修饰符;4.2.1 final成员变量;4.2.1 final成员变量;4.2.2 final局部变量;4.2.2 final局部变量;4.2.3 final方法;4.2.4 final类;4.2.5 学生实践练习;4.2.5 学生实践练习;4.3 接口;4.3 接口;...
方法声明为 final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时 给定初值, 而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用, 不能重载。 finally:再异常处理时...
在构造函数内对一个 final 域的写,与随后把这个构造对象的引用赋值给一个变量,这两个操作之间不能重排序 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序 举...
接口中的变量默认类型是public static final,也是就是说是 公有静态常量 。 而方法默认是public abstract,公有抽象方法,但是事实真的是这样吗? 一.新特性 Java 1.8对接口有两个方面的增强:接口中可以添加使用...
在Java中, 可以使用final关键字修饰类、方法以及成员变量。 (1).final标记的类不能被继承; (2).final标记的方法不能被子类复写; (3).final标记的变量即成为常量,只能被赋值一次. 注意: 如果使用final来...
1、面向对象的理解 面向对象是基于面向过程的。在开发过程中,要完成特定的功能就去找相应的对象,如果找不到就创建相应的...final:可以修饰类、方法和变量,被final修饰的类无法被继承,方法无法被复写,变量为常量只
主要介绍了Java中final变量使用总结,final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值,通常final定义的变量为常量,需要的朋友可以参考下
在Java中变量可以分为成员变量和局部变量 成员变量 通常每个类中成员变量可以分为 类变量(static修饰的变量) 以及 实例变量 针对这两种类型的变量...当final变量未初始化时系统不会进行隐式初始化,会出现报错。
本套Java视频教程适合绝对零基础的学员观看,该Java视频教程中讲解了Java开发环境搭建、Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者...
接口则不能,接口中的变量都是final类型的常量 抽象类中的方法的修饰符可以是public、protected、private或者default;接口中的方法只能是public 抽象类可以定义构造函数;接口不能 抽象类主要用来抽象类别,接口...