当前位置:  技术问答>java相关

第一次遇到这个“简单”的继承问题,疑惑疑惑疑惑啊

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

    本文导语:  请看下面这个程序,特别注意被注释掉的那行代码 class Tester {    void test(Object s)   {     System.out.println ("Object version");   }    void test(Tester s)   {     System.out.println ("Tester version");   }    void test(SubTest...

请看下面这个程序,特别注意被注释掉的那行代码
class Tester

  void test(Object s)
  {
    System.out.println ("Object version");
  } 
  void test(Tester s)
  {
    System.out.println ("Tester version");
  } 
  void test(SubTester s)
  {
    System.out.println ("SubTester version");
  } 
  // void test(String s){System.out.println("String version");} 

  public static void main (String args[])
  { 
    Tester c = new Tester(); 
    c.test (null);
    c.test (new Object()); 
  } 


class SubTester extends Tester{}
运行结果:
SubTester version
Object version

疑问:
1.第一次看到null也可以做为参数传递,那么c.test(null)到底指向哪个对应的test()方法啊?
2.那行被注释掉的语句看到了吗?如果把注释去掉,那么整个程序编译就无法通过:错误信息很简单,就一句:一个错误在c.test(null);
3. 这道题用到了哪些知识点啊?

|
不完整。
在重载方法中参数有可能混淆的情况下,编译器使用下面的策略:
1. 如果发生混淆的位置上的所有参数类型在继承关系上构成一棵有分支的树,报错。
2. 如果这些参数类型在继承关系上是一个队列,匹配类体系中最低级的那个。

程序:
public class InheritanceTest
{
public class C_1 extends Object {}

public class C_1_1 extends C_1 {}
public class C_1_2 extends C_1 {}

public class C_1_1_1 extends C_1_1 {}
public class C_1_1_2 extends C_1_1 {}
public class C_1_2_1 extends C_1_2 {}

public void pr( C_1 c )
{
System.out.println( "C_1" );
}

public void pr( C_1_1 c )
{
System.out.println( "C_1_1" );
}

public void pr( C_1_1_1 c )
{
System.out.println( "C_1_1_1" );
}

//报错
public void pr( C_1_2_1 c )
{
System.out.println( "C_1_2_1" );
}

public static void main( String args[] )
{
InheritanceTest t = new InheritanceTest();
t.pr( null );
}
}

|
译文:方法定义得越详细,即第一个方法的参数可以用来调用第2个方法而不引起便宜时错误,则带有null的方法调用将调用第一个方法。
解释清楚了吗?

|
我们知道,在java里类都是引用类型,null就是空引用类型,它可以代表任何类(只不过它是空的)。在做匹配时,根据面向对象的基本原理,应该找一个与他最匹配的参数,即:
A

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • 第一次装linux遇到的问题
  • 我用ssh连接时出错,第一次遇到,怎么解决啊?
  • 第一次写linux下的程序,遇到了困难!
  • 第一次装solaris遇到问题,请高手帮忙
  • 我是一个linux的新手,第一次安装redhat就遇到了奇怪的问题!
  • 我是菜鸟,请您帮忙!我第一次运行java程序的helloworld,遇到问题
  • 正在安装linux 8.0遇到分区问题,第一次学习,还请大家多多关注!再现等待,上午结贴
  • 我在JB中编写Servlet,为什么在第一次请求时,其会再调用init()?
  • 如何让用户第一次登录时必须更改密码?
  • 求助!第一次使用gdb,出问题不懂怎么解决
  • 第一次起qt的程序,很慢,谁知道是什么原因么?
  • 在第一次使用kde时设置中文,怎样再改回英文?
  • 第一次安装solaris需要注意什么
  • 求助,firefox安装flash的问题,第一次发贴
  • 为什么linux下第一次查找慢些?
  • 在一个类中的static方法是不是只有在第一次调用类的时候才运行?
  • 第一次弄LINUX,关于CRONTAB的!在线求助!!
  • sed 替换指定行的匹配字符串,第一次发帖。
  • jsp调用EJB,第一次能查询记录,以后怎不行拉?
  • 求助:第一次装apache+php,运行站点出现403错误!
  • applet将他嵌入到一个网页中,第一次运行结果显示都正确,可是.....
  • 我装好红旗LINUX了,第一次启动出现localhost login:,请问应该输入什么
  • 我第一次来,怎么送分数阿
  • 求助!第一次使用gdb,出问题不懂怎么解决 iis7站长之家
  • 第一次用Linux,有小问题要问
  • 第一次进java论坛,希望能够得到大家的帮助,以后多多指教。
  • 第一次装RED HAT9。0,打击真是大啊!


  • 站内导航:


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

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

    浙ICP备11055608号-3