zoukankan      html  css  js  c++  java
  • 关于java继承的一道经典面试题

    package com.test;
    class Father{
    int x = 1;
    public Father(){
    System.out.println("father");
    }
    public Father(String s){
    System.out.println("father:"+s);
    }
    }


    class Son extends Father{
    int x = 2;
    public Son(){
    System.out.println("son");
    }
    public Son(String s){
    System.out.println("son:"+s);
    }
    }


    public class Test{

    public static void main(String[] args){

    //都是new的无参构造方法

    //第一种情况,输出结果的顺序

    Son f = new Son();

    System.out.println(f.x);

    /*

    father

    son

    2

    说明:没有使用多态,父类的引用指向子类的对象,还是会执行父类的无参构造方法。

    */

    //第二种情况,输出结果的顺序

    Father f = new Son();

    System.out.println(f.x);

    /*

    father

    son

    1

    说明:使用了多态,注意这里输出的是1。

    */

    //使用new的有参构造方法

    Son f = new Son("hello");

    System.out.println(f.x);

    /*

    father

    son:hello

    2

    */

    Father f = new Son("hello");

    System.out.println(f.x);

    /*

    father

    son:hello

    1

    */

    总结:只要是new子类,无论是调用子类的有参构造还是无参构造都会执行父类的无参构造。当

    子类和父类有同一个变量名字的变量时,如果是使用了多态则调用的是父类的变量。否则调用的是子类的变量。

    补充:执行顺序,静态块>构造语句块>函数块

    java中变量不能重写,可以按如下口诀记忆:

    变量多态看左边, 
    方法多态看右边, 
    静态多态看左边。


    }


    }

  • 相关阅读:
    java作业利用递归解决问题
    java课堂测试2(两种方式)
    java模拟验证码生成
    java选做猜数字
    java课堂动手测试
    java课堂作业,求多参数的和
    《大道至简》第一章伪代码形式读后感
    《大道至简》读后感
    关于《大道至简》第八章的收获
    [JLOI2012]树 倍增优化
  • 原文地址:https://www.cnblogs.com/mojiemeizi/p/7607841.html
Copyright © 2011-2022 走看看