黑马程序员技术交流社区
标题:
关于方法敷写的问题
[打印本页]
作者:
苏伯亚
时间:
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
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 Employee() {
this.sc();
}
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.sc();
System.out.println("bonus:"+bonus);
}
}
复制代码
这样调用就ok了= =
作者:
caijunsong
时间:
2014-4-11 21:35
abstract class Employee
{
private String name;
private String id;
private double pay;
double i=3;
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();
super.sc();
System.out.println("bonus:"+bonus);
}
public static void main(String[]agrs)
{
Manager m=new Manager("caicai","11",100,200);
m.sc();
//System.out.println (super.i);//super只能用在子类的方法中
}
}
/*
super关键字有两个用法:
1、在构造函数中表示父类的构造函数形式就是:super();这个语句只能放在子类的构造函数的第一行
2、在子类的方法中作为父类对象的引用,可以引用父类的方法,字段
很明显你把super()放在方法中是不正确的 当然报错
你是想在子类复写的方法中引用父类的被复写的方法 改的方式:super.sc();这个就没必要放在方法中的
句首了,根据打印顺序
*/
复制代码
作者:
caijunsong
时间:
2014-4-11 21:36
能不能交个朋友啊 在论坛经常见到你的帖子 752541086 蔡俊松!!
作者:
四川男人
时间:
2014-4-11 22:10
在子类空参构造函数中,使用super(),在子类方法中,调用super.sc();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2