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指的是什么?

解决方案 »

  1.   

    super(name,price)是调用父类的构造函数,this指的就是Sales类吧。
      

  2.   

    因为你继承了class Sales 继承produce 类.在produce类的构造函数里面是带参的,所以用super,
    this指的是Sales用他可以点出他的变量和方法的
      

  3.   

    super(name,price):因为子类不知道父类拥有什么,所以子类重载父类的构造方法,如果不写,则系统自动调用父类中无参的构造方法;
    this:指子类自己。
      

  4.   

    调用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() {

    }
    }我个人所见.....
      

  5.   

    首先,据你现在的代码,produce类的变量不推荐做成public,可换成protected等,
    super(name,price)是因为你的Sales类继承了produce类,也就继承了produce类的变量,也就是说你的Sales类里也有了name,price变量,调用super方法是给这两个变量的初始化
    那个this指的是Sales的本实例
      

  6.   


    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;