Java面试:基础概念(六)

2014-11-24 11:52:18 · 作者: · 浏览: 56
饰符在修饰类时必须放在类名前。
abstract修饰方法就是要求其子类覆盖(实现)这个方法。调用时可以以多态方式调用子类
覆盖(实现)后的方法,也就是说抽象方法必须在其子类中实现,除非子类本身也是抽象类
注意:父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都
实现(覆盖)了,子类才有创建对象的实例的能力,否则子类也必须是抽象类。抽象类中可
以有构造方法,是子类在构造子类对象时需要调用的父类(抽象类)的构造方法。
final和abstract,private和abstract,static和abstract,这些是不能放在一起的修饰
符,因为abstract修饰的方法是必须在其子类中实现(覆盖),才能以多态方式调用,以上
修饰符在修饰方法时期子类都覆盖不了这个方法,final是不可以覆盖,private是不能够继
承到子类,所以也就不能覆盖,static是可以覆盖的,但是在调用时会调用编译时类型的方
法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用,所以上的修
饰符不能放在一起。
抽象(abstract)方法代表了某种标准,定义标准,定义功能,在子类中去实现功能(子类
继承了父类并需要给出从父类继承的抽象方法的实现)。
方法一时间想不到怎么被实现,或有意要子类去实现而定义某种标准,这个方法可以被定义
为抽象。(abstract)
模板方法模式
用abstract把制订标准和实现标准分开,制定的标准就是模板,实现就是按模板标准来实现
,也就是继承模板,实现模板中相应功能的方法。模板中不允许修改的方法可以用fianl来
修饰,这个方法不能使抽象方法,为保证安全,封装,把模板中不公开的部分用protected
(保护)修饰。
----------------------------------------
java中的接口
接口是一种程序结构,是特殊的抽象类。接口中的方法必须都是公开的抽象方法(public
abstract),接口中的属性都是公开静态常量(public static final)。
声明一个接口用 interface 关键字,接口也是一种类型,编译之后也有生成相应字节码,他
的声明规范也要符合类型的定义(一个源文件中只能有一个public interface,接口名和源
文件名相同,有public interface,就不能在写public class了)。接口中的属性可以不加
修饰符,方法也不用加修饰符。
接口也可以继承,但是只能由接口继承,在用类去继承时要换用 implements 关键字,这时
类和接口也不叫做继承关系,而是实现关系,但其实质也是继承。
一个类可以继承也只能继承另外一个类,但是可以实现多个接口,其语法是在implements后
面写接口名,多个接口以“,”分隔。
接口之间是可以多继承的,其语法和类的继承语法是相同的,在接口多继承时,在extends
后写接口名如果要继承多个接口,接口名以“,”分隔,接口的继承关系只是把其父接口中
的抽象方法继承到子接口中。要实现接口就必须实现接口中的所有方法。
一个类可以在继承一个类的同时,也可以实现一个或多个接口。采用接口就绕开了单继承限
制。
接口类型也可以做为编译时类型使用,但其实际的运行时类型必须是完全实现接口的类的对
象实例,这样就使多态变得很灵活了,
注意:实现接口时,在实现(覆盖)抽象方法时,注意必须要在方法的返回值类型前加public
修饰符。如果没有完全实现接口中的方法,那么这个类就只能够是个抽象类,不能创建对象
。接口的是实质就是特殊的抽象类。接口没有构造方法。
接口的意义:
1,接口可以实现多继承。
2,用接口可以实现混合类型(主类型,副类型),java中可以通过接口分出主次类型。主
类型使用继承,副类型,使用接口实现。
3,接口进一步深化了标准的思想,接口本身就是一个标准,他起到了降低耦合性的作用,
接口可以使方法的定义和实现相分离,也就是将接口的定义者和实现者相分离,接口也可以
用于降低模块间或系统间的耦合性。针对接口编程可以屏蔽不同实现间的差异,看到的只是
实现好的功能,
接口:定义标准,
接口的实现:实现标准
接口的调用者:标准的使用
针对接口编程原则,也就是按照标准实现。
先有接口的定义,再有接口使用者,最后把接口的是先对象传入接口的使用者中,接口的使
用者会通过接口来调用接口实现者的方法。
接口的定义者定义好了标准,接口的使用者先写好了使用代码,接口的实现者写好实现之后
把实现对象传入接口的使用者中。他调用接口中方法也就是掉用接口实现中的方法。这种过
程叫做接口的回调。
尽量使用接口类型作为编译时类型,尽量将抽取到的共性行为写在接口中。
用若干个小接口取代一个大接口。(接口隔离原则)
把一个类的功能作成接口,只暴露想暴露的方法,接口隔离原则可以实现更高层次的封装,
针对的对象不同,暴露的方法也不同。
java中的根类Object
java中所有的类的父类或直接或间接的或隐含的都是Object类。
java不允许循环继承,也就是互相继承是不可以的。
Object类中的finalize()一个对象被垃圾收集的时候, 一个对象被垃圾收集的时候,最后
会由JVM调用这个对象的finalize方法
Object类中有一个String toString()方法,返回该对象的字符串表示。Object类中的
toString()方法他返回的是类名加上他的地址的一个字符串。在子类中推荐覆盖toString
()方法。www.2cto.com
Object类中的boolean equals(Object o)方法是用来比较对象的内容是否相等,其返回值
是boolean类型的值,相同为真,不同则为假。实际上还是比较对象地址是否相同。String
类覆盖了equals()方法,他比较是对象中的内容是否相同。子类中也推荐覆盖Object类中继
承的equals()方法
equals()的覆盖原则,
自反性 x.equals(x) 为true
对称性 y.equals(x) 和 x.equals(y) 的值要相同,要么都为true,要么都为false。
传递性 x.equals(y)为true, y.equals(z)也为true ,那么x.equals(z)一定也为true。
覆盖equals()方法的步骤
boolean equals(Object o){
if(this==o) return true;//1,看看是不是一个对象
if(o==null) return true;//2,看看对象是不是空
if(!(o instanceof 本类类名)) return false;//看看是不是本类对象
......//根据本类设计。
}