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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭炜 中级黑马   /  2012-3-14 11:48  /  1819 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

将下面的代码修改正确
class Car {
private String color;
private int speed;
public Car(String color) {
this.color = color;
this.speed = 40;
}
}
class Hummer extends Car {
public Hummer(String color) {
this.speed = 60;
}
}

4 个回复

倒序浏览
你没发主函数,这里边儿吧:

首先你的speed是父类的私有变量,子类尽管继承了,也不能直接访问的。所以你子类中的this.speed = 60;是无法编译通过的。
其次就是你父类指定了有参数的构造函数,那么默认无参构造函数就不存在了,所以,子类构造函数内首行需要手工指定父类的构造函数,也就是
Hummer(String color)
{
     super(color);
}
回复 使用道具 举报
class Car {
private String color;
private int speed;
public Car(String color) {
this.color = color;
this.speed = 40;
}
}
class Hummer extends Car {
public Hummer(String color) {
super(color)  加这一句 或者在父类添加构造函数  Car(){}   因为子类的构造函数里面第一行都有一个默认的super()调用父类空参构造函数
this.speed = 60;  
}
}
回复 使用道具 举报
我帮你修改如下:
class Car
{
        private String color;
        private int speed;
        public Car(String color)
        {
                this.color = color;
                this.speed = 40;
                System.out.println("我是父类的构造函数");
        }
}
class Hummer extends Car
{
        public Hummer(String color)
        {
                super(color);
                //this.speed = 60;
                System.out.println("我是子类的构造函数");
    }
}
class GenericDemo
{
        public static void main(String[] args)
        {
                Hummer h=new Hummer("red");
        }
}
回复 使用道具 举报
speed color 是private的不可以被本类外的类直接访问,所以子类要设置时候,必须先把父类的相关变量设置为大于private的权限才行比如protected。
再有,因为父类没有无参的构造函数,所以子类必须调用父类有参的构造函数或者添加父类无参的构造函数。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马