• 对于对象初始化的加深理解


    一道有一定难度和挑战性的注重细节的有趣的面试题


    案例需求

      
    在这里插入图片描述
      


    不同写法与角度下

    写法一

    方法的修饰符为private

    package com.xie.interview;
    
    /**
     * 对象属性初始化相关的面试笔试题
     * */
    public class ObjectAttributeInit {
        public static void main(String[] args) {
            /**
             * 测试
             * */
            new B();
        }
    }
    
    class A {
        int x = 10;
        public A() {
            run();
        }
    
        /**
         * A类自定义的run方法
         */
        private void run() {
            // 打印x值
            System.out.println(x);
        }
    }
    
    class B extends A {
        int x = 20;
        public B() {
            run();
        }
        /**
         * B类自定义的run方法
         * */
        private void run() {
            // 打印x值
            System.out.println(x);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    运行结果

    10
    20
    
    • 1
    • 2

    写法二

    方法的修饰符为public

    package com.xie.interview;
    
    /**
     * 对象属性初始化相关的面试笔试题
     * */
    public class ObjectAttributeInit2 {
        /**
         * 测试
         * */
        public static void main(String[] args) {
            new B2();
        }
    }
    
    class A2 {
        int x = 10;
        public A2() {
            run();
        }
        /**
         * A类自定义的run方法
         * */
        public void run() {
            // 打印x值
            System.out.println(x);
        }
    }
    
    class B2 extends A2 {
        int x = 20;
        public B2() {
            run();
        }
        /**
         * B类自定义的run方法
         * */
        public void run() {
            // 打印x值
            System.out.println(x);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    运行结果

    0
    20
    
    • 1
    • 2

    写法三

    :加载过程析构

    package com.xie.interview.copy1;
    
    /**
     * 对象属性初始化相关的面试笔试题
     * */
    public class ObjectPropertyInit {
        /**
         * 测试
         * */
        public static void main(String[] args) {
            new B();
        }
    }
    
    class A {
        int x;
        public A() {
            super();
            x = 10;
            run();
        }
        /**
         * A类自定义的run方法
         * */
        private void run() {
            // 打印x值
            System.out.println(x);
        }
    }
    
    class B extends A {
        int x;
        public B() {
            super();
            x = 20;
            run();
        }
        /**
         * B类自定义的run方法
         * */
        private void run() {
            // 打印x值
            System.out.println(x);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    运行结果

    10
    20
    
    • 1
    • 2

    写法四

    类分类,即每个类单独拥有一个.java文件

    A类
    package com.xie.interview.copy2;
    
    /**
     * A类
     * */
    class A {
        int x = 10;
        public A() {
            run();
        }
        /**
         * A类自定义的run方法
         * */
        public void run() {
            // 打印x值
            System.out.println(x);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    B类
    package com.xie.interview.copy2;
    
    /**
     * B类
     * */
    class B extends A {
        int x = 20;
        public B() {
            run();
        }
        /**
         * B类自定义的run方法
         * */
        public void run() {
            // 打印x值
            System.out.println(x);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    测试类
    package com.xie.interview.copy2;
    
    /**
     * 对象属性初始化 相关的 面试笔试题
     * */
    public class ObjectPropertyInit {
        public static void main(String[] args) {
            new B();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果

    0
    20
    
    • 1
    • 2

    注:最后总结其中最关键的一个关键点在于方法的修饰符private还是public

    参考视频

    黑马磊哥

  • 相关阅读:
    TurboWarp简单介绍
    数据结构与算法(C语言版)P1---算法效率
    docker run 命令用法解析
    Spring面试题2:说一说IOC控制反转以及底层是如何实现的?说一说面向切面的编程(AOP)以及底层是如何实现的?
    Quantexa CDI(场景决策智能)Syneo平台介绍
    力扣2859 补9.19
    视觉语言大模型llava学习
    【Javaweb】基础开发流程与介绍
    旅游门户/旅行社网站-pc+移动端+可小程序+app强大功能-适合运营周边游/国内游/出境游
    【.Net Core】上传文件-IFormFile
  • 原文地址:https://blog.csdn.net/m0_69604107/article/details/133607909