本帖最后由 陈振兴 于 2012-9-21 00:28 编辑
我稍微深度的讲解一下!我先以我的理解来说一下,然后从专业术语的角度来解析,可能理解起来有点吃力,但是到你后面的学习当中会很重要,重要的是这个思想。
抽象即以数据和业务逻辑来作为导向的。(
数据,用我们现实生活中的代名词来,如家里有几口人,这就是数据的合理化抽象;
业务逻辑,描述你需要做什么,你想要干什么,而等你干了需要达到的效果或者说目标!
)
以父亲,儿子为例:(稍微有点不听,但可以收到一针见血的效果)
比如祖先有个遗传病——癌症
爸爸有癌症
儿子癌症
三者的关系是,最上级先有,然后爸爸、儿子才患有的。‘就和你说的,不需要抽象他们也自己可以实现的’,但对于专业角度来讲有点数据冗余了。
而这个包括的人很多,有可能是你的爷爷,的爷爷,好几辈人都有这个,你要把这个写成代码重复好几十次,显然效率就低了,然后java中就把这个”癌症“给抽象一个方法,然后让其子类都来继承,而在每个子类当中癌症会有突变(有好的,有坏的),那么就需要抽象来让每个子类去实现。
然后在你后续学习的过程中就会体会到什么是“高类聚,低耦合!”
就是一个类与类之间,模块与模块之间的复杂度,来独立完成一项工作,而可以同时去完成,都不会产生任何影响,这就是它的本质。而最本质的就是它基于抽象的编程,接口的编程。
然后专业术语:
抽象类:abstract修饰的类 1)一旦某个类中包含有抽象方法,那这个类必须定义成抽象类。反之,如果一个类不包含任何抽象方法,这个类可以定义成抽象类。 2)抽象类不能实例化,但能定义一个引用。 3)Abstract和final不能同时使用。
Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。
以你此题为例,执行顺序,
先执行父类与子类中的静态代码块部分(JVM虚拟机来做的事情),父类的构造,后执行子类的构造方法。
依据是 Father f = new Person();//以这种方式来判断运行的类是哪一个,系统才会去调用哪个类的父类和子类。
以上需要你有“一段 ”时间才能理解! |