黑马程序员技术交流社区

标题: 继承遇到的问题 求大妈解惑 [打印本页]

作者: 潘成旺    时间: 2015-2-28 13:51
标题: 继承遇到的问题 求大妈解惑
本帖最后由 潘成旺 于 2015-2-28 13:53 编辑

我这段代码:
class Animal{
        private String name;
        private int age;
        public Animal(){}
        public Animal(String name,int age){
                this.name = name;
                this.age = age;
        }
        public void setName(String name){
                this.name = name;
        }
        public String getName(){
                return name;
        }
        public void setAge(int age){
                this.age = age;
        }
        public int getAge(){
                return age;
        }
        public void eat(){
                System.out.println("我会吃饭");
        }
}
class Dog extends Animal{
        public Dog(){}
        public Dog(String name,int age){
                super.setName() = name;
                super.setAge() = age;
        }
        public void run(){
                System.out.println("我还会跑步");
        }
}
class Cat extends Animal{
        public Cat(){}
        public Cat(String name,int age){
                super.setName() = name;
                super.setAge() = age;
        }
        public void zhuoMiCang(){
                System.out.println("我还会捉迷藏");
        }
}
class AnimalDemo {
        public static void main(String[] args){
                Dog d = new Dog();
                d.setName("狗");
                d.setAge(20);
                System.out.println("姓名:"+d.getName()+" 年龄:"+d.getAge()+"岁");
                d.eat();
                d.run();
                System.out.println("------------");
                Dog dd = new Dog("狗",20);
                System.out.println("姓名:"+dd.getName()+" 年龄:"+dd.getAge()+"岁");
                dd.eat();
                dd.run();
                System.out.println("------------");
                Cat c = new Cat();
                c.setName("猫");
                c.setAge(17);
                System.out.println("姓名:"+c.getName()+" 年龄:"+c.getAge()+"岁");
                c.eat();
                c.zhuoMiCang();
                System.out.println("------------");
                Cat cc = new Cat("猫",17);
                System.out.println("姓名:"+cc.getName()+" 年龄:"+cc.getAge()+"岁");
                cc.eat();
                cc.zhuoMiCang();
                System.out.println("------------");
        }
}

这样写报错:
---------- javac ----------
AnimalDemo.java:28: 错误: 无法将类 Animal中的方法 setName应用到给定类型;
                super.setName() ;
                     ^
  需要: String
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
AnimalDemo.java:29: 错误: 无法将类 Animal中的方法 setAge应用到给定类型;
                super.setAge() ;
                     ^
  需要: int
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
AnimalDemo.java:38: 错误: 无法将类 Animal中的方法 setName应用到给定类型;
                super.setName() ;
                     ^
  需要: String
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
AnimalDemo.java:39: 错误: 无法将类 Animal中的方法 setAge应用到给定类型;
                super.setAge() ;
                     ^
  需要: int
  找到: 没有参数
  原因: 实际参数列表和形式参数列表长度不同
4 个错误

输出完成 (耗时 1 秒) - 正常终止

---------------------------------------------------------------------------------------------
然后我回头看视频里面的代码
那个          super.setName() = name;
                super.setAge() = age;
写成        super(name,age);
这样就没错了,这是为啥呀;搞蒙了。。。。


作者: Hsidar    时间: 2015-2-28 14:19
super指的是父类,super(name, age)就是在调用父类的构造函数,如果不调用的话,需要这样写:
  1. class Dog extends Animal{
  2.         public Dog(){}
  3.         public Dog(String name,int age){
  4.                 super.setName(name);//这里应该这样写
  5.                 super.setAge(age);//这里应该这样写
  6.         }
  7.         public void run(){
  8.                 System.out.println("我还会跑步");
  9.         }
  10. }
  11. class Cat extends Animal{
  12.         public Cat(){}
  13.         public Cat(String name,int age){
  14.                 super.setName(name); //这里应该这样写
  15.                 super.setAge(age);//这里应该这样写
  16.         }
  17.         public void zhuoMiCang(){
  18.                 System.out.println("我还会捉迷藏");
  19.         }
  20. }
复制代码

作者: enjoy    时间: 2015-2-28 14:25
父类的方法需要参数,再调用的时候肯定要传参数的吧
作者: 潘成旺    时间: 2015-2-28 14:42
Hsidar 发表于 2015-2-28 14:19
super指的是父类,super(name, age)就是在调用父类的构造函数,如果不调用的话,需要这样写:
...

谢谢你,我懂了:P
作者: 潘成旺    时间: 2015-2-28 15:07
enjoy 发表于 2015-2-28 14:25
父类的方法需要参数,再调用的时候肯定要传参数的吧

谢谢你,我知道了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2