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中变量不能重写,可以按如下口诀记忆:

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


    }


    }

  • 相关阅读:
    循环神经网络
    相似度计算(余弦距离/欧式距离)
    最常见Linux操作
    注意力机制总结
    随机打乱数组算法、蓄水池算法
    6.1 数据结构---树(遍历)
    Node.js调用C/C++
    linux中nmcli命令详解
    stylus入门使用方法
    webpack CommonsChunkPlugin详细教程
  • 原文地址:https://www.cnblogs.com/mojiemeizi/p/7607841.html
Copyright © 2011-2022 走看看