日期:2014-05-18  浏览次数:21285 次

接口!!接口!!
对接口还是不理解:看下面这段程序,希望回答问题的时候能按照我的问题一个一个的解答,万分感谢。如果有好的建议也请提出来,比如哪里能看到类似的书籍和举例。
C# code

public class LPex
{
  Cplex cplex=new Cplex();

  internal static void methodA (IInterf1 face1, IInterf2[][] face2, IInterArray[][] ary)
  {
    double[] lb={1,2,3};
    double[] ub={4,5,6};
    IInterf2[] x= face1.GenerateArray(3, lb, ub): 
    ary[0] = new IInterArray[2]
    ary[0][1]=face1.AddLe( something inside  )
  }
}




这是CPLEX里一段典型的定义 优化方程 变量上下限的语句。让我看不明白的是:
1)方法的参数里有接口的引用还是实现了接口的类的引用。 
2)引用这个接口能做什么
3)方法内部第三行程序,接口的引用face1,突然冒出个方法,GenerateArray,竟然又生成了个接口,这是在做什么?
4)第五行 也是, 一个接口的方法能生成另一个接口。这是什么意思?不是说接口的方法只能在类定义的时候才能实现么, 这里还没写就直接用它生成新的接口了, 而且通篇程序任何描述ary[0][1]内方法的语句。

请前辈帮帮新人!!谢谢!!


------解决方案--------------------
接口不能被实例化。。。那么传进来的是什么?
------解决方案--------------------
怎么还不明白?不是跟你说过“方法参数传递的都是实例”吗?

实例是实例,类型是类型...把这个分清楚...

比如...男厕所只允许进男人,这个男人就是个接口参数...设计时鬼知道会进来什么人,运行时进来的管它是什么人...

有男人接口的就按男人的走,该用小便池的用小便池的,该用大便池的用大便池的...你不需要知道他是张三还是李四...没有男人接口的就是异常,你也不需要管他是春哥还是曾哥...
------解决方案--------------------
接口不能被实例化,但是接口需要被实现...一个实例显而易见是被实现了的,它的类型继承实现了某个接口而已...
------解决方案--------------------
探讨

怎么还不明白?不是跟你说过“方法参数传递的都是实例”吗?

实例是实例,类型是类型...把这个分清楚...

比如...男厕所只允许进男人,这个男人就是个接口参数...设计时鬼知道会进来什么人,运行时进来的管它是什么人...

有男人接口的就按男人的走,该用小便池的用小便池的,该用大便池的用大便池的...你不需要知道他是张三还是李四...没有男人接口的就是异常,你也不需要管他是春哥还……

------解决方案--------------------
任何实例...你这逻辑思维怎么做这行啊...

再说一次...实例是实例,类型是类型...把这个分清楚...

人就是人,春哥就是春哥,春哥可以是人,人不能是春哥...春哥可以是抽象的任何概念,但春哥永远都是春哥...
------解决方案--------------------
再举个例子,

打比方上面方法好比一个动作或者说行为——狗狗吃饭(食物 food) 

你是调用者,你调用“狗狗吃饭”并给予食物。首先“食物”约定了你给狗狗的是能吃的东西,你给它板砖,

条凳,它都不吃,并且编译错误还咬你。你只好把“狗粮”拿出来给它吃。

狗粮 是 食物 的实例。。。食物 是 狗粮 的接口。
------解决方案--------------------
也就是说,你方法参数声明是接口,但调用方必须传给你这个接口的实例。你不能只从方法这去想,还要联想调用方。接口不能实例化这是游戏规则。
------解决方案--------------------
internal static void methodA (IInterf1 face1, IInterf2[][] face2, IInterArray[][] ary)

加粗的是声明部分,声明的是接口,即“食物”
红色的是实例,即“狗粮”


------解决方案--------------------
god...你的脑筋就不会转转嘛...女人能生女人,那你去给找个“女人”来给我们看看?

抽象的概念仅仅用来分类,实例就是实例,实例具有的抽象类型都只是事先约定的...张三是男人,也可以是公物猿还可以是贪污犯,但张三只是张三而已...所有类型都只是约定,实例只是被约定的...春哥其实不想被人叫哥...

先把抽象和实现分清楚...
------解决方案--------------------
有人会在建男厕所的时候去想jj不能被实例化,而替上帝担心是不是少写了 张三:Ijj 这类的声明呢?

我感觉你的问题是对面向对象完全没概念,在拿面向过程的思维方法在思考面向对象的概念...先去学学OOP,转转脑筋吧...
------解决方案--------------------
男厕所也只挂了个象征男人的牌子,你指望男厕所生孩子吗?
------解决方案--------------------
概念问题就是概念的描述...你应该先去学OOP入门...否则怎么说你都看不懂...

再说一次...实例是实例,类型是类型...类型仅仅是约定,实例如何实例化在哪里实例化与方法参数无关...

教育部规定了只有通过大学考试的才能叫大学毕业生,我公司规定了只招大学毕业生...你不用管这些规定是不是狗P,但这里就这么约定的...

教育部才不管你清华、北大还是野鸡学校,通过考试就发毕业证,这个考试方法传递的就是大学生这么个接口,它才不管你在哪儿实例化,类型是什么...

同样的,我公司HR只关心你有没有大学毕业证,这个招聘方法传递的就是大学毕业证这么个接口,它才不管你在哪儿实例化,类型是什么...

没有人会在建厕所时关心未来的顾客如何出生...公司招人的时候同样不关心...
------解决方案--------------------