哈工大软件构造期末复习题集(3)

Behavioral subtyping必须要满足的条件,不包括以下__

A 子类型可以增加父类型中所没有的新方法
B 子类型override父类型的某方法,子类型方法需具备相同或更弱的post-condition
C 子类型必须要具备与父类型相同或更弱的invariants(不变量)
D 子类型override父类型的某个方法,不能比父类型方法抛出新的异常类型,但可比父类型方法抛出的异常更少

正确答案:BC

关于Behavioral subtyping的说法,不正确的是___

A 子类型override父类型某个方法,其返回值类型应该与父类型方法的返回值类型相同或者更具体(子类型)
B 子类型override父类型某个方法,其参数的类型应该与父类型方法的参数类型相同或者更具体
C 某个类是immutable的,它可以派生出一个mutable的子类(违反LSP)
D 子类型override父类型某个public方法,子类型中该方法的可见性可以为private(违反LSP)

正确答案:BCD

public class A {
	public Object a (String d) {
		return "";
	}
}
public class B extends A {
	@Override
	public String a (Object d) {
		return null;
	}
}

该段Java代码是否能通过static type checking?

A 能
B 不能

正确答案:B
(虽然方法a在类A和类B里符合covariance和contra-variance,但因为Java不支持contra-variance,这里的@Override是不能成立的。)

public class A {
	public Object a (String d) {
		return "";
	}
}
public class B extends A {
	public String a (Object d) {
		return null;
	}
}

该段Java代码是否能通过static type checking?

A 能
B 不能

正确答案:A
方法a在类A和类B里符合covariance和contra-variance,但因为Java不支持contra-variance,于是编译器就把B中的a方法看作了A中a方法的overload。

关于Adapter模式的说法,正确的是___

A Adapter类可提供被复用的方法,但与Client要求的spec不吻合
B Adaptee类用于将client的请求转化为对Adapter类的方法的调用
C Adapter类和Adaptee类之间的关系是delegation(template 模式不是
D Adapter和ITarget之间的关系是inheritance

正确答案:C

Adapter模式为何要设计一个ITarget接口,而不是由client直接请求Adapter的Request()方法?

A Client对接口编程,无需了解Adapter类
B Adapter类可能发生变化,接口隔离了该变化,不会影响client代码
C Adaptee类可能发生变化,需要隔离client与他的变化
D Client无法直接构造Adapter的实例,故需要增加接口

关于Iterator模式,不正确的是____

A 为了让你的类A具备iteration的能力,需要A实现Iterator接口
B 为了让你的类A具备iteration的能力,还需要构造一个实现Iterable接口的类作为符合A特定需求的迭代器
C Java里Iterable接口只有一个方法iterator(),它返回一个迭代器对象
D Java里Iterator接口有三个方法hasNext(), next(), remove()

正确答案:AB
AB反了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值