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

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


    }


    }

  • 相关阅读:
    Iview多行表单增删、表单校验
    Linux常用命令+Git命令
    前端架构师图谱
    第八章学习心得
    第七章学习心得
    第6章学习心得
    第5章学习总结
    第四章心得体会
    第三章学习心得
    第二章学习心得
  • 原文地址:https://www.cnblogs.com/mojiemeizi/p/7607841.html
Copyright © 2011-2022 走看看