当前位置:  技术问答>论坛 iis7站长之家

SCJP多态题二

    来源: 互联网  发布时间:2015-03-25

    本文导语:  这是另外一道,还是要请各位高手详细给说说,谢谢了 public class Poly {   public static void main(String args[])            {              PolyA ref1 = new PolyC();              PolyB ref2 = (PolyB)ref1;    ...

这是另外一道,还是要请各位高手详细给说说,谢谢了

public class Poly
{
  public static void main(String args[])
           {
             PolyA ref1 = new PolyC();
             PolyB ref2 = (PolyB)ref1;
             System.out.println(ref2.g());
// This prints 1
               // If f() is not private in PolyB, then prints 2
           }
}
class PolyA
{
  private int f()
           {
             return 0;
           }
           public int g()
           {
             return 3;
           }
}
class PolyB extends PolyA
{
           private int f()
           {
             return 1;
           }
           public int g()
           {
             return f();
           }
}
class PolyC extends PolyB
{
  public int f()
           {
             return 2;
  }
}

|
有理有理!哈哈哈哈哈  我叙述一下,大家看对不对,嘻嘻

 - private方法不能被override
 - static方法可以被override
 - 但是这种对于static方法的override不能被“多态式后期绑定”(所以也就部份
   失去了override对于OO多态的意义)

例子如下:
 - private方法不能被override
class Father{
    private void m0() throws java.io.IOException {}
}

class Son extends Father{
    void m0() throws java.lang.Exception {}
}
这是可以编译的(注意这里子类掷出了“更宽”的异常,但是通过了编译)
所以可以等效地认为这时子类中的m0()没有override父类中的m0()。

 - static方法可以被override
class Father{
    static  void m1() throws java.io.IOException {}
}
class Son extends Father{
    static void m1() throws java.lang.Exception {}
}
是不能编译的:出错提示“mi() in Son cannot override m1() in Father。。。”

 - 但是这种对于static方法的override不能被“多态式后期绑定”(所以也就部份
   失去了override对于OO多态的意义)
class Father{
    static void m1(){
        System.out.println("Father");
    }
}
class Son extends Father{
    static void m1(){
        System.out.println("Son");
    }
}
public class Test {
    public static void main(String[] args){
        Father.m1();
        Son.m1();

        Son x = new Son();
        ((Father)x).m1();
        ((Son)x).m1();
    }
}
输出:
Father
Son
Father
Son
这个结果说明:static方法可以被override,但不能被“多态式后期绑定”,所以也就
部份失去了override对于OO多态的意义。因为override在OO中的一个重要作用就是支持
多态。也可以这样认为:Java中的static方法在被override时不支持OO多态。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 小弟想考scjp,贡献一些scjp考试的网址?
  • 我一个伙计考过SCJP一个多月了,怎么SCJP的证书还没有来呀?到哪里问去呀?
  • 过了SCJP和没过SCJP的都请进来,谢谢!
  • 我一直搞不清什么sl275与scjp1.2,scjp1.4的关系?那位能说说么
  • [提议] 既然考scjp的人这么对,提议设立scjp专栏,响应的进来领分!
  • 英文不是很好,为了考SCJP,好多地方看英文书,概念什么的比较模糊,哪有详细的中文的Java语言教程呀?最好和SCJP想符合的,别告诉我《Think in Java》呀!那本书我烦透了!
  • 检验你的SCJP能力!!!来自SUN的SCJP题库中的一道经典线程题目,你能做出正确的答案吗???
  • 谁有scjp练习题,越新越好?谢了
  • 险过scjp
  • 50分求助:哪儿能搞到SCJP的教程资料与试题资料!!!!!
  • 请推荐一些SCJP认证书籍和其他资料
  • 求助!本人下个星期考SCJP急需好的题库!高分求教!
  • —— SCJP认证相关问题 ——
  • 谁能告诉我SCJP考题的网址吗?
  • SCJP
  • 请问scjp/scjd和高程比,哪个分量重些啊?
  • *考过scjp的给个意见*
  • 在考SCJP中,很多人说的104和147指的是什么?
  • 通过了SCJP认证以后,还能干什么?
  • 寻找scjp认证考试方面的资料,培训资料和试题,谢谢!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3