软构随笔笔记(3)

自己期末复习看的 内容不够严谨 翻译的也比较随便

泛型,继承和委托

泛型(generic)

请添加图片描述
List和List都是List<?>的子类型,因为?最大。
List是List<? extends Object>的子类型,因为Number是Object子类型,extends相当于小于等于。
List是List<? super String>的子类型,因为String是Object的子类型,super相当于大于等于。

//以下是合法的。
List< ? extends Integer> inList = new ArrayList<>();
List<? extends Number> numList = intList;
委托与继承(inheritance & delegation)
//这是委托
public class FriendshipGraph{
	private Graph<Person> graph = Graph.empty();
	public void addVertex(Person p){
		graph.add(p);
		}
		....
	}

  • 在要调用的类里实例化一个对象,再通过这个对象调用其类里的方法。
//这是继承
public class FriendshipGraph<Person> extends ConcreteEdgeGraph<Person>{
	public void addVertex(Person p){
	super.add(p);
	}
	...
}
  • 直接继承要用方法所在的类,然后通过super调用父类方法。

委托:依赖和关联(dependency & association )

  • 依赖通过方法的参数或者在方法的局部中使用发生联系,说白了就是临时地使用了一次委托,这个委托没有本地变量保存,直接传给要用的方法,并且在其中会通过委托调用他类里的方法,举个例子:
Flyable f =new FlyWithWings();
Quackable q =new Quack();
Duck d = new Duck();

d.fly (f);
d.quack (q);

class Duck { 
	void fly (Flyable f){
	f.fly ();
	}
	...
}
  • 关联是永久的委托关系,说白了就是创建了一个对象实例,也可以说本地变量,去持久地保存那个委托,想调用什么那个类里的方法,随时引用这个对象调用就可以了,举个例子:
Flyable f = new FlyWithWIngs();
Duck d = new Duck(f);
Duck d2 = new Duck();
d.fly;

class Duck{
	Flyable f = new CannotFly();
	
	void Duck(Flyable f){
	this.f = f;
	}
	void Duck(){
	f = new FlyWithWings();
	}
	void fly() { f.fly();}
}
  • 至于组合和聚合(composition & aggregation),其实就是关联的两个子类别。组合比较强,不能变化,一定得类内实例化,并且本地委托调用;聚合比较弱,用外部对象当作参数传入,委托不需要new新的实例化,只需本地对象指向它,从而调用函数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值