Java程序设计第六章作业

1 补充题

1.对象实例化(初始化)的执行顺序。

①为子类对象分配内存空间,对域变量进行默认初始化
②绑定构造方法,将new对象中的参数传递给构造方法的形式参数
③调用this或super语句,二者必居其一,也只有一
④进行实例变量的显式初始化操作
⑤执行当前构造方法体中的程序代码

2.如何实现两个对象之间互发消息,请举例说明。

对象互发消息:通过使用一个对象的引用来调用另一个对象的数据成员或成员方法
例如:

class FighterPlane {
   private String name;
   private int missileNum;   
   private A  a;
   public void setA(A _a){
      if (_a !=null)  { a = _a ;}
   }
   public A getA(){
      if (a !=null)
          { return a;}
      else  return null;
   }
   public void fire(){ ……}
   public FighterPlane(String _name,int _missileNum){ ……}

class A 
{
    FighterPlane fp;
    public A(FighterPlane fpp){
       this.fp = fpp; 
       fpp.setA(this);//将当前对象传给FighterPlane
    }
    public void invoke(){
       //A中对象发送消息给FighterPlane的对象
       fp.fire(); 
    }
}

3.谈谈组合与继承的区别以及两者的使用场景(即什么时候宜用组合?什么时候宜用继承?)。

组合:通过对象内部的属性引用来实现

继承:从已有的类派生出新的类

使用场景:在不具有结构和功能上的相似性时,使用继承;在结构实现不同、功能“可叠加”时,使用组合更好

4.Java中的运行时多态的含义是什么?有什么作用?请举例说明。

运行时多态指的是覆盖,在运行时根据输入参数动态选择不同的 成员方法执行,体现了一个类本身的多态性,使代码具有良好的拓展性。
例如:

class Parent {
   public int getScore(){ 
return 3; 
}
   public String getCountryName(){
 return “China”;
 }
}

class Son extends Parent {
    public int getScore(){
      return 4;
    }
 }
 public class RunSon{
    public static void main(String args[]){
      Son  s = new Son();
      System.out.println(s.getScore());
      System.out.println(s.getCountryName()); 
     }
}

输出结果:

4
China

5.使用接口改写例6.8中的程序。

interface Shape{
    abstract public double getArea();
    abstract public double getPerimeter();
    abstract public void show();
}

class Rect implements Shape{
    private int k, m;
    public Rect(int width, int height){
        this.k = width;
        this.m = height;
    }
    public double getArea(){
        return (k * m);
    }
    public double getPerimeter(){
        return (2 * (k + m));
    }
    public void show(){
        System.out.println("Rect Area:" + getArea());
        System.out.println("Rect Perimeter:" + getPerimeter());
    }
}

class Triangle implements Shape{
    private int x, y, z, m;
    public Triangle(int _x, int _y, int _z){
        this.x = _x;
        this.y = _y;
        this.z = _z;
        this.m = (x + y + z) / 2;
    }
    public double getArea(){
        return(Math.sqrt(m * ( m - x) * ( m - y ) * (m - z)));
    }
    public double getPerimeter(){
        return (2 * m);
    }
    public void show(){
        System.out.println("Rect Area:" + getArea());
        System.out.println("Rect Perimeter:" + getPerimeter());
    }
}

class Circle implements Shape{
    private int r;
    public Circle(int _r){
        this.r = _r;
    }
    public double getArea(){
        return(r * r *Math.PI);
    }
    public double getPerimeter(){
        return(2 * Math.PI * r);
    }
    public void show(){
        System.out.println("Rect Area:" + getArea());
        System.out.println("Rect Perimeter:" + getPerimeter());
    }
}
public class RunShape {
    public static void main(String args[]){
        Rect rect = new Rect(5, 10);
        Triangle triangle = new Triangle(3, 4, 5);
        Circle circle = new Circle(6);
        rect.show();
        triangle.show();
        circle.show();
    }
}

6.简述运算符instanceof的使用场景。

用以判断它左边的对象是否是它右边的类或子类的实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值