原文地址
谈谈.Net中的协变和逆变关于协变和逆变要从面向对象继承说起。继承关系是指子类和父类之间的关系;子类从父类继承所以子类的实例也就是父类的实例。比如说Animal是父类,Dog是从Animal继承的子类;如果一个对象的类型是Dog,那么他必然是Animal。协变逆变正是利用继承关系 对不同参数类型或返回值类型 的委托或者泛型接口之间做转变。我承认这句话很绕,如果你也觉得绕不妨往下看看。如果...
比起前面的封装和继承,多态这个概念不是那么好理解。我们还是从一个事例开始:公司最近为了陶冶情操,养了几种动物(Animal),有猫(Cat)、狗(Dog)、羊(Sheep),这些动物都有共同的特性,会吃(Eat)、会叫(Shout),但是它们吃的不同,叫的也不同。既然这样,我们能不能设计一个动物类(...
USE testDB
GO
--将animal表名更改为animalCategory
EXEC sp_rename '[dbo].[animal]','animalCategory';
--将bird表中的外键animalCode更改为animalCategoryCode
EXEC sp_rename '[dbo].[bird].animalCode','animalCa...
分类:
数据库 时间:
2015-07-29 01:06:48
阅读次数:
182
1、考虑下面的场景:设计一个容器,包含一组类型不同但相互关联的对象(比如:Animal,Dog,Cat),对象具备多态行为。2、容器一般只能包含一种类型的对象,使用vector 会造成对象切割,不具备多态行为。3、经典的解决办法是:vector, 但是这会增加内存管理的负担。考虑下面的情况: Dog...
分类:
编程语言 时间:
2015-07-26 22:11:37
阅读次数:
158
面向对象的第三个特征,多态:可以理解为事物存在的多种状态。1,多态的体现:父类的引用指向了自己的子类,父类的引用可以接收子类对象。Animal c1 = new Cat(); c1.eat(); function(new Dog()); function(new Pig());public stat...
分类:
编程语言 时间:
2015-07-25 16:44:51
阅读次数:
146
1.Animal类package com.yfs.javase;public class Animal { public void cry() { System.out.println("动物叫..."); }}2.Dog/Cat/Bird类package com.yfs.javase;publ.....
分类:
编程语言 时间:
2015-07-25 12:00:26
阅读次数:
214
复习:jdkjre写第一个java程序javac 编译java 运行环境变量的配置变量和数据类型标识符什么是标识符:用来给变量、类、接口等等对象起名字;eg:动物 animal,电脑 computer;标识符的规则以字母、下划线、美元符号$开头其他部分可以包含字母、数字、下划线、美元符号$;标识符不...
分类:
其他好文 时间:
2015-07-23 23:30:45
阅读次数:
172
//
// main.m
// 继承
//
//
#import
#import "Animal.h"
#import "Cat.h"
#import "Dog.h"
#import "FeedMan.h"
int main(int argc, const char * argv[])
{
// Animal * animal = [Animal new];
// ...
分类:
移动开发 时间:
2015-07-22 09:29:05
阅读次数:
107
null与undefined都可以表示没有、无的意思,但它们之间还是有区别。undefined:当var申明变量,但是未初始化时,对象为undefined。例如:var animal;console.log(animal); //undefined同时:var animal;console.log(...
分类:
其他好文 时间:
2015-07-18 22:32:12
阅读次数:
172
//
// main.m
// 继承
//
//
#import
#import "Animal.h"
#import "Cat.h"
#import "Dog.h"
#import "FeedMan.h"
int main(int argc, const char * argv[])
{
// Animal * animal = [Animal new];
// ...
分类:
移动开发 时间:
2015-07-18 14:05:40
阅读次数:
230