黑马程序员技术交流社区

标题: 关于方法敷写的问题 [打印本页]

作者: 苏伯亚    时间: 2014-4-11 19:14
标题: 关于方法敷写的问题
先看代码
abstract class Employee
{
        private String name;
        private String id;
        private double pay;

        Employee(String name,String id,double pay)
        {
                this.name = name;
                this.id = id;
                this.pay = pay;
        }
       
        public abstract void work();
        public void sc()
        {
                System.out.println("name:"+name);
                System.out.println("id:"+id);
                System.out.println("pay:"+pay);
        }

}
class Manager extends Employee
{
        private int bonus;
        Manager(String name,String id,double pay,int bonus)
        {
                super(name,id,pay);
                this.bonus = bonus;
        }
        public void work()
        {
                System.out.println("manager work");
        }
        public void sc()
        {
                super();
                System.out.println("bonus:"+bonus);
        }

}
先建立了一个父类Employee。然后建立了一个子类Manager继承了父类。因为子类Manager中的数据几多了一个bonus,所以想敷写父类中的输出函数输出函数sc( ),因为只是多打印一句话,我想问一下能不能用super语句,只是多写一句输出语句。照我上面的方法总是报错
Demo.java:53: 错误: 对super的调用必须是构造器中的第一个语句
                super();
                     ^
1 个错误

我想问一下能怎么该代码 谢谢
作者: Monkey·D·Chas    时间: 2014-4-11 19:42
抽象类不象具体类那样描述一类具体事物,它是提取多种具有相似性的具体事物的共同特征而产生的
它是抽象出来的,根本不存在。因此面向对象程序设计机制禁止对象实例化
这是你这段代码错误的地方
还有 就是  在子类的构造方法中可以写
super(类型  变量,类型  变量)的带参数的构造方法的   因为你继承了父类的属性 可以用父类的构造方法帮我初始化 我继承的东西
作者: jingdou56    时间: 2014-4-11 19:46
你程序中的 super();

这是指父类中空参数的构造方法,而且要写在构造方法的第一句;

你想调用父类的 sc方法,直接写 super.sc() 就可以了,

你写的跟本就不是你想调用的方法!

想用父类的成员,就是 super.成员名!
作者: Kelvinhu    时间: 2014-4-11 19:53

  1. abstract class Employee
  2. {
  3.         private String name;
  4.         private String id;
  5.         private double pay;

  6.         Employee(String name,String id,double pay)
  7.         {
  8.                 this.name = name;
  9.                 this.id = id;
  10.                 this.pay = pay;
  11.         }
  12.         
  13.         public Employee() {
  14.                         this.sc();
  15.                 }

  16.                 public abstract void work();
  17.         public void sc()
  18.         {
  19.                 System.out.println("name:"+name);
  20.                 System.out.println("id:"+id);
  21.                 System.out.println("pay:"+pay);
  22.         }

  23. }
  24. class Manager extends Employee
  25. {
  26.                
  27.         private int bonus;
  28.         Manager(String name,String id,double pay,int bonus)
  29.         {
  30.                
  31.                 super(name,id,pay);
  32.                 this.bonus = bonus;
  33.         }
  34.         public void work()
  35.         {
  36.                 System.out.println("manager work");
  37.         }
  38.         public void sc()
  39.         {
  40.                     super.sc();
  41.                 System.out.println("bonus:"+bonus);
  42.         }

  43. }
复制代码
这样调用就ok了= =

作者: caijunsong    时间: 2014-4-11 21:35

  1. abstract class Employee
  2. {
  3.         private String name;
  4.         private String id;
  5.         private double pay;
  6.                 double i=3;
  7.         Employee(String name,String id,double pay)
  8.         {
  9.                 this.name = name;
  10.                 this.id = id;
  11.                 this.pay = pay;
  12.         }
  13.         
  14.         public abstract void work();
  15.         public void sc()
  16.         {
  17.                 System.out.println("name:"+name);
  18.                 System.out.println("id:"+id);
  19.                 System.out.println("pay:"+pay);
  20.         }

  21. }
  22. class Manager extends Employee
  23. {
  24.         private int bonus;
  25.         Manager(String name,String id,double pay,int bonus)
  26.         {
  27.                 super(name,id,pay);
  28.                 this.bonus = bonus;
  29.         }
  30.         public  void work()
  31.         {
  32.                 System.out.println("manager work");
  33.         }
  34.         public void sc()
  35.         {
  36.                //super();       
  37.                                 super.sc();
  38.                 System.out.println("bonus:"+bonus);


  39.         }
  40.                 public static void main(String[]agrs)
  41.             {
  42.                                 Manager m=new Manager("caicai","11",100,200);
  43.                                 m.sc();
  44.                                 //System.out.println (super.i);//super只能用在子类的方法中
  45.                 }
  46. }
  47. /*
  48.     super关键字有两个用法:
  49.         1、在构造函数中表示父类的构造函数形式就是:super();这个语句只能放在子类的构造函数的第一行
  50.     2、在子类的方法中作为父类对象的引用,可以引用父类的方法,字段
  51.         很明显你把super()放在方法中是不正确的 当然报错
  52.         你是想在子类复写的方法中引用父类的被复写的方法 改的方式:super.sc();这个就没必要放在方法中的
  53.         句首了,根据打印顺序
  54. */
复制代码

作者: caijunsong    时间: 2014-4-11 21:36
能不能交个朋友啊 在论坛经常见到你的帖子  752541086 蔡俊松!!
作者: 四川男人    时间: 2014-4-11 22:10
在子类空参构造函数中,使用super(),在子类方法中,调用super.sc();




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