think in java 第8章 多态 ------ 复盖私有方法的缺陷
2012-07-05 17:26
344 查看
package think.in.exercise10; /** * * @author Administrator * think in java 第8章 多态 * 复盖私有方法的缺陷 */ public class PrivateOverride{ private void function() { System.out.println(" PrivateOverride.function()"); } public static void main(String[] args) { /** * 陷井: * 子类方法与超类方法签名相同,超类方法是private的 * 子类方法是public的 ,下面代码调用的是超类的方法,而不是子类的方法 * 令人担心结果: * 结果表示表明,当子类的public方法签名与超类的private方法签名相同时, * 发生向上转型时,调用不到子类的public方法,而是超类的private方法 * 注意: * test对象是在超类中创建的。若不是在超类中创建,则test.function();语法 * 上是行不通的,因为function()方法是私有的,不能在类的外部调用. * 所以那种令人担心的结果,在编译是就解决了,而不会引起运行时的混乱 * * 实际中,我们会经常在超类中创建子类对象吗?并让其发生向上转型吗? * 一般情况应该 是,超类还没有写完,怎么可能在其中创建子类的对象呢? * 除非有种可能是,修改超类引起的 * * 但下面的B部分多多少少还得引起注意,看下面的B部分 */ PrivateOverride test = new Derived();//向上转型 test.function(); /** * B部分 */ BaseClass po = new DerivedClass(); //po.proc();//这种调用方式语法上通不过,因为function()是私有的 po.call(po); } } /** * * @author Administrator * 继承上面的类 */ class Derived extends PrivateOverride { public void function()//方法签名与基类一样 { System.out.println("Derived.function() "); } } /** * B部分 * @author Administrator * */ class BaseClass { private void proc() { System.out.println("BaseClass.proc()"); } /** * @param obj * 始终调用自己的私有方法,虽然proc方法和其子类方法签名一样 */ public void call (BaseClass obj) { obj.proc(); } } class DerivedClass extends BaseClass{ public void proc() { System.out.println("DerivedClass.proc()"); } }
相关文章推荐
- [think in java] 第8章 多态
- think in java 第8章 多态
- [think in java] 第8章 多态
- thinkinjava21.4.4----java中interrupt和interrupted方法的使用和线程退出的时机
- [Think In Java]基础拾遗2 - 多态、反射、异常、字符串
- Thinking in Java 4th - 第8章 多态
- Think in java 第八章 多态 第九章 接口 第十章 内部类
- Think in Java 静态工厂方法学习总结
- 多态的缺陷 “覆盖”私有方法
- 多态的缺陷:“覆盖私有方法”
- 多态的缺陷:“覆盖私有方法”
- 看完think in java第8章后的想法以及对java 1.5以后版本泛型的学习笔记
- Think In Java 多态学习
- java中多态的一些缺陷以及方法调用绑定
- 《Think in Java》(八)多态
- Think in java--工具类--获取类中方法
- 《Thinkinginjava》第8章-多态
- Thinking in Java 第8章 多态
- Java多态及静态方法对动态方法的调用
- Think in Java 学习