第六章 继承与多态
面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承。 程序代码重复在程序设计上就是不好的信号,多个类间出现重复的程序代码时,设计上可考虑的改进方法就是把相同的程序代码提升为父类。 在java中,继承时使用extends关键字,private成员也会被继承,子类必须通过父类提供的方法来存取。 java中,子类只能继承一个父亲,继承有个重要的关系,子类与父类间会有is-a的关系。 检查多态语法逻辑是否正确,方法是从=右边往左读:右边类型是不是左边类型的子类?如果不是就编译失败。 UML 多态 •继承可以复用代码,更大的用处是实现「多态」 封装是继承的基础,继承是多态的基础 「用父类声明对象引用,用子类生成对象」就有了多态 如果某方法块中没有任何程序代码操作,可以使用abstract标示该方法为抽象方法,这个方法不用撰写{}区块,直接“;”结束就好。 java中规定内含抽象方法的类,一定要在class前标示abstract,表示这是一个定义不完整的抽象类。 继承也符合DRY(Don't Repeat Yourself)原则 ISA与OCP原则,LSP原则 赋值: 「=」 右边 ISA 左边,否则要强制类型转换 •Role role1 = new SwordsMan() SwordsMan swordsman = role1; //x SwordsMan swordsman = (SwordsMan)role1; //ok
注意ISA是指功能上的
extends •Java中只有单一继承,也就是只能有一个父类
抽象方法、抽象类 •abstract Java中有抽象方法的类一定是抽象类,但抽象类中的方法不一定都是抽象方法 抽象类不能使用new生成对象
继承语法细节 •public/package/protected/private ppp •super与this •java.lang.Object •toString •equals •hashCode •instanceof
Java中有public、protected与private三个权限关键字,但实际上有四个权限范围。 想取得父类中的方法定义,可以在调用方法前,加上super关键字。 如果想执行父类中某构造函数,可以使用super()指定。this()与super()只能选择一调用,而且一定要在构造函数第一执行。 如果class前使用了final关键字定义,那么表示这个类是最后一个了。 如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object。在java中,任何类追溯至最上层父类,一定就是java.lang.Object.
第七章 接口与多态
何谓接口 •接口(interface)定义行为 •implements 对于“定义行为”,可以使用interface关键字定义,接口中的方法不能操作,直接标示为abstract,而且一定是public。类要操作接口,必须使用implements关键字。
接口语法细节 •接口中的public abstract可以省略 •接中可以使用extends继承接口,并且可以继承多个接口 •匿名内部Lambda •JDK8 前在匿名内部类中访问局部变量,则该局部变量必须为final
使用interface来定义抽象的行为外观,方法要声明为public.abstract,无须切不能有操作。为了方便,也可以省略public sbstract,编译程序会协助补齐。
•emum emue定义了特殊的类,继承自java.lang.Enum。 enum中列举的常数,实际上是public static final,且为枚举类型实例。
教材学习的问题与解决
下载了一些手机app,还有弄到了一个教学视频,希望有用。
其他(感悟、思考等,可选)
觉得java还是挺有趣的,我对它有了兴趣,相信我可以的,
学习进度条
先弄懂怎么编程,然后会下苦功夫。