• Java继承中的几道面试题


    第一题:

     1 /*
     2     看程序写结果:
     3         A:访问成员变量的原则:就近原则。
     4         B:this和super的问题:
     5             this     访问本类的成员
     6             super    访问父类的成员(可以理解为的)
     7         C:子类的所有构造方法执行前默认先执行父类的无参构造方法。
     8         D:一个类的初始化过程:
     9             成员变量进行初始化过程如下:
    10                 默认初始化
    11                 显示初始化
    12                 构造方法初始化
    13                 
    14     输出的结果是:
    15             fu
    16             zi
    17             30
    18             20
    19             10
    20 */
    21 class Fu {
    22     public int num = 10;
    23     public Fu() {
    24         System.out.println("fu");
    25     }
    26 }
    27 
    28 class Zi extends Fu {
    29     public int num = 20;
    30     public Zi() {
    31         System.out.println("zi");
    32     }
    33     public void show() {
    34         int num = 30;
    35         System.out.println(num); //30
    36         System.out.println(this.num); //20
    37         System.out.println(super.num); //10
    38     }
    39 }
    40 class ExtendsTest {
    41     public static void main(String[] args) {
    42         Zi z = new Zi();
    43         z.show();
    44     }
    45 }

    第二题:

     1 /*
     2     看程序写结果:
     3         A:一个类的静态代码块,构造代码块,构造方法的执行流程:
     4             静态代码块 > 构造代码块 > 构造方法
     5         B:静态的内容是随着类的加载而加载,
     6             即:静态代码块的内容会优先执行。
     7         C:构造代码块
     8              在类中方法外出现(即在类中的成员位置),可以把多个构造方法方法中相同的代码存放到一起,用于对对象进行初始化,
     9             每次调用构造方法都执行,并且在构造方法前执行。
    10         C:子类的所有的构造方法默认都会去访问父类的无参构造方法。
    11         
    12     输出结果是:
    13           静态代码块Fu
    14           静态代码块Zi
    15           构造代码块Fu
    16           构造方法Fu
    17           构造代码块Zi
    18           构造方法Zi
    19 */
    20 class Fu {
    21     static {
    22         System.out.println("静态代码块Fu");
    23     }
    24 
    25     {
    26         System.out.println("构造代码块Fu");
    27     }
    28 
    29     public Fu() {
    30         System.out.println("构造方法Fu");
    31     }
    32 }
    33 
    34 class Zi extends Fu {
    35     static {
    36         System.out.println("静态代码块Zi");
    37     }
    38 
    39     {
    40         System.out.println("构造代码块Zi");
    41     }
    42 
    43     public Zi() {
    44         System.out.println("构造方法Zi");
    45     }
    46 }
    47 
    48 class ExtendsTest2 {
    49     public static void main(String[] args) {
    50         Zi z = new Zi();
    51     }
    52 }

    第三题:

     1 /*
     2     看程序写结果:
     3         A:成员变量的问题
     4             int x = 10; //成员变量x是基本类型
     5             Student s = new Student(); //成员变量s是引用类型
     6         B:一个类的初始化过程
     7             先进行成员变量的初始化:
     8                 默认初始化
     9                 显示初始化
    10                 构造方法初始化
    11         C:子父类的初始化(分层初始化)
    12             先进行父类初始化,然后进行子类初始化。
    13             
    14     结果:
    15         YXYZ
    16         
    17     问题:
    18         虽然子类中的构造方法默认有一个 super();
    19         但初始化的时候,不是按照那个顺序进行的。
    20         而是按照分层初始化进行的。
    21         super(); 它仅仅表示要先初始化父类数据,再初始化子类数据。
    22 */
    23 
    24 class X {
    25     //成员变量(引用类型)
    26     Y b = new Y();
    27     //无参构造方法
    28     X() {
    29         System.out.print("X");
    30     }
    31 }
    32 
    33 class Y {
    34     //无参构造方法
    35     Y() {
    36         System.out.print("Y");
    37     }
    38 }
    39 
    40 public class Z extends X {
    41     //成员变量(引用类型)
    42     Y y = new Y();
    43     //无参构造方法
    44     Z() {
    45         //super(); //它仅仅表示要先初始化父类数据,再初始化子类数据。
    46         System.out.print("Z");
    47     }
    48     public static void main(String[] args) {
    49         new Z(); 
    50     }
    51 }

     

  • 相关阅读:
    NGUI 3.5课程(五岁以下儿童)button-图片切换
    跑openstack命令错误【You must provide a username via either -...】
    angular cors跨域资源共享设置 和formdata设定
    PHP 如何获取客户端ip地址
    JavaScript如何生成思维导图(mindmap)
    百度ueditor上传图片时如何设置默认宽高度
    英语发音规则---E字母常见的发音组合有哪些
    google搜索引擎爬虫爬网站原理
    legend2---开发日志10(ajax请求的方法是否同样会执行base控制器里面的方法)
    JS中如何判断对象是对象还是数组
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8449506.html
Copyright © 2020-2023  润新知