Java编程思想——第八章续
来源:互联网 发布:如何经营淘宝店铺 编辑:程序博客网 时间:2024/05/29 16:52
构造器内部的多态方法的行为
一个基类有导出类,初始化导出类,则会调用基类的构造器,然而,如果基类的构造器需要调用导出类的方法,则会出现问题,因为此时的导出累还没有初始化完全,这会出现很危险的情况!
协变返回类型
协变返回类型允许返回更具体的Wheat类型
class Grain{
public String toString(){ return "Grain"; }
}
class Wheat extends Grain{
public String toString(){ return "Wheat"; }
}
class Mill{
Grain process(){ return new Grain(); }
}
class WheatMill extends Mill{
Wheat process() { return new Wheat(); }
}
public class CovariantReturn{
public static void main(String[] args) {
Mill m = new Mill();
Grain g = m.process();
System.out.println(g);
m = new WheatMill();
g = m.process();
System.out.println(g);
}
}
/*Output
Grain
Wheat
*/
用继承进行设计
这里要澄清一点,各个版本的书都强调继承的重要性,继承是面向对象多么 概念以及方法呀,“多态是一种如此巧妙的工具”,但我们不应该总想要应用着继承技术,因为这会加重设计的负担,使事情变得不必要地复杂起来。应该首先考虑一下“组合”,尤其是不确定应该应用什么技术时。组合不会强制设计进入继承的层次结构中。组合更加灵活,可以动态选择类型(因此也选择了行为),相反的是继承要求知道确切类型。
纯继承与扩展:只有在基类中已经建立的方法才可以在导出类中被覆盖,此时基类可以接受发送给导出类的任何信息,我们只需向上转型,不需要知道正在处理的对象的确切类型,通过多态解决问题了!注意一点,导出类的扩展部分不能被基类访问。
向下转型:
class Useful {
public void f() {}
public void g() {}
}
class MoreUserful extends Userful{
public void f(){}
public void g(){}
public void u(){}
public void v(){}
public void w(){}
}
public class RTTI{
public static void main(String[] args){
Useful[] x = {
new Useful(),
new MoreUserful()
}x[0].f();x[1].g();((MoreUseful)x[1]).u();((MoreUseful)x[0]).u();
}
}
0 0
- Java编程思想——第八章
- Java编程思想——第八章续
- JAVA编程思想学习总结:第八章——多态
- Java编程思想笔记——第八章 多态
- Java编程思想——第八章 多态
- 《Java 编程思想》--第八章:多态
- JAVA编程思想-第八章 多态
- 多态-java编程思想-第八章
- 《Java编程思想》第八章 多态
- 《java编程思想》第八章:多态
- Java编程思想(第八章)
- java编程思想读书笔记----第八章 多态
- Java编程思想--第八章 多态
- Java编程思想 第八章读书笔记-多态
- Java编程思想第四版第八章学习——多态
- Java编程思想第四版读书笔记——第八章 多态
- java编程思想读书笔记-第八章 接口和内部类
- Java编程思想笔记第八章(多态)
- json和xml两种传输格式
- js 正则表达写法
- Intent(意图)
- 物理集成
- [Leetcode] Binary Tree Level Order Traversal (Java)
- Java编程思想——第八章续
- 容易被忽略CSS特性
- javascript 一种继承的方式,摘自JavaScript语言精粹
- mac 下 svn working copy locked
- 画图解释SQL联合语句
- linux的查找匹配方式
- 小内存大数据排序
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
- SectionIndexer 的使用(联系人分类索引)