A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 唐兴旺 于 2012-2-25 16:07 编辑

class  A
{
        String name="哈哈";
        int hand=2;
        public A()
        {
                System.out.println("A不带参数构造方法");
        }
        public A (String X)
                {
                System.out.println("A带参数构造方法");
                }
}
class B extends A
{       
        public B (String Y)
                {
                /*此处不写super();也会默认调用父类A无参构造函数,
                我只想继承父类成员变量与成员方法,如何不让他执行父类无参构造函数*/
                System.out.println("name:"+name+"  hand:"+hand);
                }
}
public class C
{
        public static void main(String [] args)
        {
                B ceshi=new B("w");
        }
}

7 个回复

倒序浏览
子类中所有的构造函数默认第一行都是super();
所以子类必然要访问父类的构造函数。

可以用手动的方式控制访问父类的任何一个构造函数。你的代码可以改成这样
  1. class  A
  2. {
  3.         String name="哈哈";
  4.         int hand=2;
  5.         public A()
  6.         {
  7.                 System.out.println("A不带参数构造方法");
  8.         }
  9.         public A (String X)
  10.                 {
  11.                 System.out.println("name:"+name+"  hand:"+hand);
  12.                 }
  13. }
  14. class B extends A
  15. {        
  16.         public B (String Y)
  17.                 {
  18.                                 super("w");
  19.                 /*此处不写super();也会默认调用父类A无参构造函数,
  20.                 我只想继承父类成员变量与成员方法,如何不让他执行父类无参构造函数*/
  21.                 //System.out.println("name:"+name+"  hand:"+hand);
  22.                 }
  23. }
  24. public class C
  25. {
  26.         public static void main(String [] args)
  27.         {
  28.                 B ceshi=new B("w");
  29.         }
  30. }
复制代码
运行结果是:name:哈哈 hand:2

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
子类实例化的时候 是一定会调父类构造的,而且是在自己的构造之前调
回复 使用道具 举报
package cn.itcast.day01;

public class ConstrutorDemo {
        public static void main(String[]args){
                B b=new B("执行");
        }
}
class A{
        String name="哈哈";
        int hand=2;
       
        public A(){
                System.out.println("A不带参数构造方法");
        }
        public A(String str){
                System.out.println(str+"name:" + name + "---hand:" + hand);
        }
}
class B extends A{
        public B(String y){
                super(y);
        }
}


二楼哥们的这代码块
public B (String Y)

17.                {

18.                                super("w");

19.                /*此处不写super();也会默认调用父类A无参构造函数,

20.                我只想继承父类成员变量与成员方法,如何不让他执行父类无参构造函数*/

21.                //System.out.println("name:"+name+"  hand:"+hand);

22.                }

super(参数) 这参数应该是变量Y吧,
这过程中,唐的代码,参数没有参与到代码中

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
想调用那个构造函数,只需在调用的时候,传入对应的参数即可.
回复 使用道具 举报
子类 默认调用父类无参构造函数只是设计者设计时候这样定的吧  参数不一样的话就可以调用自己的构造函数 B类中 写上this.name=Y,

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
邓科 黑马帝 2012-2-25 15:04:14
7#
用this调用的吧
回复 使用道具 举报
基类的构造方法总是在导出类的构造过程中调用,而且是按照继承的层次逐渐向上链接;以使每个基类的构造方法都能得到调用。如果没有明确的指定调用某个基类的构造方法,系统默认地调用默认的构造方法,如果不存在默认的构造方法系统会报错。----怎么可能“只想子类继承父类成员变量与成员方法,不想默认调用父类无参构造函数”
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马