继承相关面试题

1.请问下面程序的输出结果是什么?

class Fu{

        public int num = 125;

        publicFu(){

            System.out.println("fu");

        }

    }

    class Zi extends Fu{

        public int num = 256;

        publicZi(){

            System.out.println("zi");

        }

        publicvoidshow(){

            int num = 512;

            System.out.println(num);

            System.out.println(this.num);

            System.out.println(super.num);

        }

    }public class Test {

        publicstaticvoidmain(String[] args){

            Zi z = new Zi();

            z.show();

        }

}

答案:

fu

zi

512

256

125

分析:

创建Zi的对象之后系统会先调用Zi的父类Fu中的构造方法,所以先打印了fu

之后系统调用Zi中的构造方法,打印出zi

在show方法里面有个局部变量num=512,第一行打印num,调用的是局部变量,结果是512

通过this调用了成员变量num,打印出256

通过super调用父类中的num,打印出125


2.请问下面程序输出的结果是什么?

public class Test2_Extends {

    publicstaticvoidmain(String[] args){

        Zi z = new Zi();

    }

}class Fu {

    static {

        System.out.println("静态代码块Fu");

    }

    {

        System.out.println("构造代码块Fu");

    }

    publicFu(){

        System.out.println("构造方法Fu");

    }

}class Zi extends Fu {

    static {

        System.out.println("静态代码块Zi");

    }

    {

        System.out.println("构造代码块Zi");

    }

    publicZi(){

        System.out.println("构造方法Zi");

    }

}


答案:

静态代码块Fu

静态代码块Zi

构造代码块Fu

构造方法Fu

构造代码块Zi

构造方法Zi

分析:

1.系统将Fu.class和Zi.class分别加载到方法区的内存里面,静态代码会随着.class文件一块加载到方法区里面,所以先打印出了静态代码块中的内容。

2.构造代码块优先于构造方法执行,父类初始化之前,所以打印出父类中的构造代码块和构造方法中的内容。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容