新手~ 想问一下关于java中的接口和向上转型 例如 List list = new ArrayList(); 和 ArrayList arrayList = new ArrayList(); 这两句话第一句是创建ArrayList对象并耦合到List接口使实例"list"成为对接口List通用的对象, 因此list只含有List和ArrayList中的通用方法而不再具有ArrayList中区别List的方法 第二句是建立ArrayList对象, 包含所有ArrayList方法 那么我想问的问题是, 用第一句时既然ArrayList()已经向上转型成为List了, 那ArrayList()本身的方法存在的意义是什么? 还是说如果牵扯到比较复杂的接口编程, 需要创建ArrayList对象, 例如l, l可以对和list非通用的属性进行编辑, 而后建立一个引用 List lList = l; 来对通用接口进行编辑呢? 另外我注意到, 让一个方法要求一个接口对象时, 即使我创建的对象没用声明为接口类型, 而只是implements了接口, 那么参数传递进去时会自动upcasting到所需的接口. 例如 interface inter { .... } class cl implements inter { ... } public static void abc(inter i) { ... } public static void main { cl c = new cl(); abc(c); } 这里abc(c)仍旧是有效的. 所以我感到疑惑. 不知道最初说的那两句的区别和用途到底是什么样子的 希望大大们耐心帮我讲解下 |