类型系统概述:
使用类型的目的:在计算机语言中使用类型是为了让编译器确定类型所关联的对象需要分配多少空间;
在java中,基本系统类型有三类,分别是类,接口,抽象类。
类:在java中,对象是类的实例化,类定义了对象的内部数据布局和方法,通过代码直接操纵方法。一个类只能扩展另一个类,也就是所谓的单继承了。类不是可以继承基类的所有的属性和方法,还是重写基类的方法。所有的类看起来就像一颗树,其树根就是Object类,其他的类说到底是他的直接或者间接的扩展。
接口:接口声明了一组方法,要求实现该接口的类全部实现接口中的所有方法。子类也要实现基类中实现的所有接品,当然它也可以实现其也接口。接品作来一种类型,实现某个接口的类的实例同时也是该接口实现的实例。类可以实现多个接口,而这实际上是为了克服单继承所带来的不便,所以接口并不是像树一样的结构。值得注意是的接中不能实例化对象。
抽象类:抽象类是介于接口和类之间的,声明为抽象类的类,除了可以像接口声明一组方法的外,还可以有具体的方法。抽象类跟接口一样不能实例化对象。抽象类是单继承树中的一部分。
以上就是java类型中核心部分。
接口为什么而存在?
关于接口的争议存在两点:
(1)从运行效率上来看,实现接口的类在编译时都要实现接口的实例化,这就是等于增加了一层间接的东西。不过,由于现在采用的是just-in-time的编译器,所以这个争议的声音几乎消失了。
(2)从程序员的角度来说,既然接口只是声明了方法而没有具体的实现,声明接口,没有声明接口的代码量肯定比有接口的代码量少,效率更高。这来源于:既然实现接口时,关于方法名,返回值类型,输入参数都要在类中再实现一次,那声明接口不就是多余的吗?
关于接口应该从系统的角度上来说:
接口的本质存在:java作为一种抽象型的语言,接口定义方法的声明方法,实质是定义了一种抽象。实现此接口的类可以按不同的方法具体化接口里的方法,但他们仍然具有接口所给出的抽象。而这正是java所提供的表现不同实现的共同之处。
从编程的角度上讲:把方法声明和方法实现相分隔开,编译器可以查出程序员拼错了方法或者改变了方法名。
从项目开发上来说:在一个团队开发中,由于分工的不同,我们必须信任其他的队友不会用到跟我们跟我们一样的类的方法名。
接口的多态体现:编译器在检查类的方法中的方法参数和返回值时,要求传入的参数的返回值类型跟接口中的必须符合。所谓的必须符合是指“不用一致”,但“至少是”;也就是如果声明的类型是基类的话,我们是可以往里同传入子类型的。这种抽象后的接口,实现了最大的扩展性。
接口的最大目的是要给使用对象的人提供了一套可以从对象上执行的操作。