广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 计算机学校 > 惠州计算机学校 > 正文

携程Java程序员的面向对象面试题_惠州计算机Java培训

作者:邓华发布时间:2021-03-21分类:惠州计算机学校浏览:727


导读:携程给面试Java程序员的人出了一道面向对象面试题,你们会解吗?下面惠州北大青鸟老师给大家科普一下怎么解这个题目。

携程给面试Java程序员的人出了一道面向对象面试题,你们会解吗?下面惠州北大青鸟老师给大家科普一下怎么解这个题目。



public class Base
{
  private String baseName = "base";
  public Base()
  {
      callName();
  }
  public void callName()
  {
      System. out. println(baseName);
  }
  static class Sub extends Base
  {
      private String baseName = "sub";
      public void callName()
      {
          System. out. println (baseName) ;
      }
  }
  public static void main(String[] args)
  {
      Base b = new Sub();
  }
}

求这段程序的输出。

1. Base b = new Sub();

2. Base b = 直接忽略,从 new Sub();开始

3. 类加载器加载 Base,Sub 类到jvm;

4. 为Base,Sub 类中的两个属性baseName 分配存储空间,但是不初始化;

注意:属性的初始化时放在构造器中,按照代码顺序执行的。

5. new Sub会调用Sub的无参构造器,而在这个构造器中会隐式调用父类Base的无参构造器;

6. 父类Base的构造器中代码本质是

public Base()

{

baseName = "base";

callName();

}

即父类的属性baseName 的值为base。但为何输出null,骚年别急。

7. 因为父类构造器方法是在子类中调用的,即大环境是子类。此时,调用的方法callName()当然是指子类的方法。而这个方法打印的属性baseName当然也是子类的。那现在子类的属性baseName的值是多少呢?答案是null.因为此时子类Sub的构造器内代码本质是:

super();

baseName="sub";

此时baseName="sub"还没执行。

因此,左后的值当然是null.相信通过上面老师的解答,大家应该知道怎么解答这个面向对象面试题了吧!想了解更多关于Java的资讯,可以来惠州北大青鸟新方舟校区详细了解。

java5.png

Java

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


惠州计算机学校排行
标签列表
网站分类
文章归档
最近发表