实训-继承与接口2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训继承与接口 2
一、实训目标
理解对象的上转型对象,以及多态的目的和意义,掌握多态的常用形式。
理解抽象类的意义和实际应用的一般模式,熟练掌握抽象类和抽象方法的定义以及抽象类的继承,尤其是子类是非抽象类的情况。
二、实训内容
1、请按模板要求,将【代码】替换为Java程序代码。
Parent.java
abstract class Parent{ abstract void grow();
}
Son.java
class Son extends Parent{ void grow(){
System. out .println( "son: 我比父亲成长条件好一点!" ); // 重写grow ()方法,输出”son: 我比父亲成长条件好一点! ”
}
void play(){
System. out .println(" 我会踢球" );
}
}
Daughter.java
class Daughter extends Parent{
void grow(){
System. out .println( "daughter: 我比父亲成长条件好很多!" ); // 重写grow ()方法,输出” daughter: 我比父亲成长条件好很多! ”
}
void dance(){
System. out .println(" 我会跳舞" );
}
MyTest.java
public class MyTest {
public static void main(String[] args ) {
Parent p=new Son();
// 将p设为为子类Son的上转型对象
}
p.grow(); // 调用重写父类中的grow ()方法
//p.play(); 这里会报错,因为不能调用子类新增的play() 方法
Son s =(Son) p; // 将上转型对象进行强制转化为子类Son的对象s.play(); // 调用子类中的方法
Parent p2 =new Daughter(); // 将p设为为子类Daughter 的上转型对象p2 .grow();
// 调用重写父类中的grow ()方法
Daughter d =(Daughter) p2; // 将p进行强制转化为Daughter 的对象 d.dance(); // 调用Daughter 类中的dance ()方法
【实验-继承与接口1】
(1)设计一个形状类Shape,包含一个getArea() 方法,该方法不包含实际语句。
package pk1;
public interface Shape {
double getArea( double area );
public abstract
public double getArea();
}
2)在Shape类基础上设计圆形(Circle) 、矩形( Rectangle )和梯形(Ladder) 三个子类,要求根据实际形状重写getArea() 方法,用于计算形状的面积。
Circle.java
package pk1;
public class Circle implements Shape {
public Circle( int i ){
this . r=i ; // 设置半径
}
private float r;
public double getArea(){
return 3.14* r*r;
}
@Override
public double getArea( double area ) {
// TODO自动生成的方法存根
return 0;
}
}
Rectangle.java package pk1;
public class Rectangle implements Shape{ private float w;
// 宽private float h; // 高
public Rectangle( float w, float h){ this . w=w;
this . h=h;
}
public double getArea(){
return w*h;
}
@Override
public double getArea( double area ) {
// TODO自动生成的方法存根
return 0;
}
}
Ladder.java package pk1;
public class Ladder implements Shape{
private float t ; // 上底
下底
private float b; //
高
private float h; //
public Ladder( float t float b, float h){
this . t =t ;
this . b=b;
this . h=h;
}
public double getArea(){ return (( t +b)* h)*1/2;
}
@Override
public double getArea( double area ) {
// TODO 自动生成的方法存根
return 0;
}
}
(3)创建一个应用程序主类TestShape,在main()方法中分别创建三个子类对象,Circle c=new Circle(10);// 构造方法中给圆半径变量赋值Rectangle r=new Rectangle(10,20);// 构造方法中给长、宽变量
赋值
Ladder c=new Ladder(3,5,4);// 构造方法中给上底、下底和高变
量赋