日期:2014-05-20  浏览次数:20694 次

接口与继承的区别???
如下的所示:
class   C1{}
class   C2   extends   C1{}  
interface   C3{}
class   C4   implements   C3{}
public   static   void   main(String   arg[]){
      C1   c1=new   C2();
      C3   c3=new   C4();

      C2   c2=new   C2();
      C4   c4=new   C4();
}
我想知道的是,在上面的例子中,c1和c2有什么相同点和不同点。c1与c2在调用方法的时候有什么区别,同样c3和c4的功能是不是一样呢???


------解决方案--------------------
接口是声明一种对象间传递消息的协议,这样可以针对接口编程而不必知道底层实现,好处就是在你底层代码发生变动时,只要接口不变就可以改变底层代码而不必改变调用者的代码

在你的例子里

C3 c3=new C4();

比如 C3接口的底层实现改变了,但是你的程序依然能正常运行
------解决方案--------------------
支持楼上的,接口就是一个协议,就好比你去上馆子,叫番茄蛋花汤,大排挡有大排挡的番茄蛋花汤,酒店有酒店的番茄蛋花汤
interface 番茄蛋花汤{} //菜圃
class 大排挡 implements 番茄蛋花汤{} //大排挡的番茄蛋花汤
class 酒店 implements 番茄蛋花汤{} //酒店的番茄蛋花汤

番茄蛋花汤 a = new 大排挡();
番茄蛋花汤 b = new 酒店();

a 和b就是两种不同的实现的实例,两碗番茄蛋花汤,他们都是番茄蛋花汤,你可以不用知道他是那里的,当然一个便宜一个贵:)

c1,c2,c3,c4都是引用变量,他们的类型是C1,C2,C3,C4 ,比如C1 c1=new C2(); c1这个引用变量只能访问C1中定义的成员,即C2中重写的部分,如果要访问子类中特有的方法,就会报错拉

------解决方案--------------------
学习
------解决方案--------------------
class C1{}
class C2 extends C1{}
interface C3{}
class C4 implements C3{}
public static void main(String arg[]){
C1 c1=new C2(); //c1是C2创建的对象(c22)的上转型对象,相当于C1 c1;C2 c22=new C2();c1=c22;这里c1只能操作C2中继承C1的方法和成员变量,但是不能操作C2中新增加的方法和成员变量。
C3 c3=new C4(); //这个不懂,请教下面的。

C2 c2=new C2();//c2可以调用C2中的方法和成员变量,可以调用继承C1的方法和成员变量。
C4 c4=new C4();
}

------解决方案--------------------
(1)接口可以被多重implements,抽象类只能被单一extends

(2)接口只有定义,抽象类可以有定义和实现

(3)接口的字段定义默认为:public static final, 抽象类字段默认是 "friendly "(本包可见)

------解决方案--------------------
路过,学习``
------解决方案--------------------
其实就是范围大小的区别
你可以画个大圆圈,这个大圆圈是类

然后大园中间画个中圆,这个是抽象类,抽象类可以只有定义,也可以有实现

再中间画个小圆,这个是接口,接口只能有定义,不能有实现
------解决方案--------------------
关注..............
------解决方案--------------------
继承的机制是对功能的一种扩展。
例如你拿到一个类,准备用它,但是你感觉它有些不足,你需要的有些功能它可能没有,这个时候你可以继承它然后扩展它的功能。
借口的机制是一种对业务的定义和规范。
例如你在做项目的时候,你需要规定一些类实现什么样子的功能,你就要规定一些接口然后让这些类实现它。