请教下这个程序

oudong 2008-03-06 11:19:46
class produce
{
public String name;
public double price;
public produce(String name,double price)
{
this.name=name;
this.price=price;
}
public String toString()
{
String s=name+"\t"+price;
return s;
}
}
class Sales extends produce
{
public int num;
public double discount;
public Sales(String name,double price,int num,double discount)
{
super(name,price);
this.num=num;
this.discount=discount;
}
private double cost()
{
double cost=super.price*num*discount;
return cost;
}
public String results()
{
String s="\t"+num+"\t"+discount+"\t"+cost();
return s;
}
}
public class UseSales
{
public static void main(String args[])
{
Sales s1=new Sales("比较本电脑",6999.99,200,0.9);
Sales s2=new Sales("激光扫描仪",1699,500,0.8);
Sales s3=new Sales("三合一打印机",888.88,150,0.8);
System.out.println("商品名称\t"+"单位价钱\t"+"销售数\t"+"折扣\t"+"实际\t");
System.out.println(s1+"\t"+s1.results());
}
}

里面的子类Sales的构造函数 Sale()中的为什么要用super(name,price),再问下那个this指的是什么?
...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
duzhonghua 2008-03-07
  • 打赏
  • 举报
回复

public Sales(String name,double price,int num,double discount)
{
//因为继承了produce,所以用super(name,price)显现的调用父类的构造函数,
//题外话,如果父类和子类同样有一个use的函数,而在子类中可能用super.use()来访问父类中的use函数
super(name,price);
//为什么在自己类中还有用this呢,感觉怪怪的是吧,
// 答案是因为你的参数 Sales(String name,double price,int num,double discount)
//看到括号里的int num,double discount的参数了吧,它和类中的定义的public int num; public double discount;的一样,为了以似区别,所以必须加上this
//不然,在你的构造函数里面,只不过是对参数的赋值
this.num=num;
this.discount=discount;
}
bt_lose 2008-03-06
  • 打赏
  • 举报
回复
调用super(name,price)是因为类的初始化是从祖先类开始的,也就是说,在初始化某个类是,他回调用自己构造方法时去调用父类构造方法,如此下去,在调用自己执行自己的构造方法,super();指的就是默认的构造方法,但是由于你的produce类中显式声明了一个带两个参数的构造方法,所以默认的构造方法就不能用了,除非显式声明.
super(name,price)就相当于调用父类构造方法的意思.这句话必须放在构造函数的第一句执行.如果有默认构造函数,则可以省略.

this指的当前类的对象的一个引用,比如说produce 类,如果在它里面用this,那么this就指的是它的一个实例,在那个类里面用就带表是那个类的一个具体对象
用java来表示this的话应该是这样(假设java还没有关键字this);

class TestThis {
private TestThis this = new TestThis();
public TestThis() {

}
}

我个人所见.....
lvzhu18 2008-03-06
  • 打赏
  • 举报
回复
super(name,price):因为子类不知道父类拥有什么,所以子类重载父类的构造方法,如果不写,则系统自动调用父类中无参的构造方法;
this:指子类自己。
heting1024 2008-03-06
  • 打赏
  • 举报
回复
因为你继承了class Sales 继承produce 类.在produce类的构造函数里面是带参的,所以用super,
this指的是Sales用他可以点出他的变量和方法的
wenly0561010 2008-03-06
  • 打赏
  • 举报
回复
super(name,price)是调用父类的构造函数,this指的就是Sales类吧。
byta101 2008-03-06
  • 打赏
  • 举报
回复
首先,据你现在的代码,produce类的变量不推荐做成public,可换成protected等,
super(name,price)是因为你的Sales类继承了produce类,也就继承了produce类的变量,也就是说你的Sales类里也有了name,price变量,调用super方法是给这两个变量的初始化
那个this指的是Sales的本实例

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧