实验11 super,继承中的构造方法,toString()和equals()
一、实验目的
1. 掌握super在继承中的使用规则。
2. 掌握基类Object的使用。
3. 掌握toString()和equals()的重写。
二、实验内容
1.下面是一个具有继承的程序RectangleDemo.java。类Volume继承了父类Rectangle,
主类是RectangleDemo。
public class RectangleDemo
{ public static void main (String[] args)
{ double result;
Volume obj1=new Volume (10,20,30);
result=obj1.volume ();
System.out.println ("得到的长方体体积 ="+result);//10*20*30=6000
result=obj1.area ();
System.out .println ("得到的长方形面积 ="+result); //10*20=200
result=obj1.volume (10.0);
System.out.println ("立方体的体积="+result); //10*20*10=2000
}
}
class Rectangle
{ double length;
double width;
double area()
{ return length*width;
}
Rectangle(double w,double l)
{ length=l;
width=w;
} }
class Volume extends Rectangle
{ double height;
Volume(double l,double w,double h)
{ super(l,w);
height=h; }
double volume()
{ double vol;
vol=area()*height;
return vol; }
double volume(double y)
{ return y*y*y; } }
【思考问题】
①类RectangleDemo起何作用?Volume类 和Rectangle类之间有何关系?
解:Rectangle属于主类,是程序编译和运行的入口;Volume继承了Rectangle的数据成员width、length和成员方法Area,Volume是Rectangle的子类;
②解释类Volume中 Volume(double l,double w,double h) 的作用,super(l,w) 语句的作用;
解: 1.Volume(double l,double w,double h) 是Volume类的构造函数,对本类数据成员height和父类数据成员width、length进行初始化。
2.Super主要是运用在继承条件下,对父类的数据成员进行初始化,值得注意super.name要求name是非私有的,这里super(l,w)相当于重新调用了父类Rectangle的有参构造方法。
③指出类Volume中方法 double volume()和double volume(double y)体现了面向对象技术的哪个性质? 解:重载
④如果对类Rectangle中的方法 double area()加上修饰符private,程序能否通过
编译,为什么?
解:不可以,因为子类继承的数据成员或方法只能是非私有的。
⑤写出程序运行结果;
得到的长方体体积 =6000
得到的长方形面积 =200
立方体的体积=2000
4. 针对下面的类Person,对其重写toString()和equals()方法。
class Person
{
String name;
int age;
public String toString(){
return “name ”+name+” age “+age;
}
Public Boolean equals(Object obj){
If(obj!=null &&obj instanceof Person)
{
Person p=(Person)obj;
If(name.equals(p.name))&&(age==p.age)
Return true;
Else return false;}
else return false;
}
public void print()
{
System.out.println("Name is " + name + " and age is " + age);
}
}
5. 针对下面的继承类,请在空白处为子类创建构造方法,并为子类重写一个print方法。
class Person
{
String name;
int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void print()
{
System.out.println("Name is " + name + " and age is " + age);
}
}
/**
* Student类继承Person类,Student类是Person类的子类
* @author EricLiang
*
*/
class Student extends Person
{
String major;
Student (String name,int age,String major)
{super(name,age);
This.major=major;
}
Public void print()
{
System.out.println(“name=”+name+ “ age=”+age+ “ major=”+major);
}}