zoukankan      html  css  js  c++  java
  • Java 构造器 一道构造器调用子类重载方法的题目

    构造器中不能new本类对象,否则进入死循环。

    构造器没有返回值,也没有void修饰。

    使用关键字super可以调用父类的构造器,而且这一句必须放在第一句的位置,否则无法编译。

    题目:

    请写出以下程序的输出。

    /**
     * 构造器题目
     * Created by Heyiyong on 2014-4-6 上午12:09.
     */
    public class ConstructorTest extends  BB{
        public static void main(String[] args) {
            new ConstructorTest(5);
        }
        private int a = 1;
    
        public void func() {
            System.out.println("Test.func a = " + a);
        }
    
        public ConstructorTest(int a) {
            this.a = a;
            System.out.println("ConstructorTest");
        }
    }
    
    class BB {
        private int a = 10;
        public void func() {
            System.out.println("BB.func a = " + a);
        }
        public BB() {
            System.out.println("BB 构造器");
            func();
        }
    }

    输出结果是:

    BB 构造器
    Test.func a = 0
    ConstructorTest

      原因是Test类构造一个对象,首先调用的是父类BB的构造器,构造器调用了func方法,这个方法在子类有重载,因此调用的是子类的func方法,此时子类的成员变量a还没有初始化,因此a的值为0。

      此外,如果BB类中方法func为private,那么调用的func方法为BB类中的func方法,输出的a值为10。

  • 相关阅读:
    LCD实验学习笔记(八):中断
    LCD实验学习笔记(七):NAND FLASH
    LCD实验学习笔记(六):存储控制器
    LCD实验学习笔记(五):MMU
    博客已经迁移
    什么是全栈工程师
    深入解析Django Admin模块
    Firefox OS 指导方针-字体
    Firefox OS 指导方针-调色板
    Firefox OS 指导方针-简介
  • 原文地址:https://www.cnblogs.com/wuyou/p/3456887.html
Copyright © 2011-2022 走看看