1 说接口就是用来实现多态的不大对吧,如果没有接口,多态能实现吗?也能嘛
class O
{
public void run(){}
}
class A extends O
{
public void run(){}
}
class B extends O
{
public void run(){}
}
//用于测试多态的一个方法
public void test(O obj)
{
obj.run();
}
//实现多态
test(new A()); //调类A中的run()
test(new B()); //调类B中的run()
你可能会说class O 不就相当于是个接口吗?
不一样! 类O 中也实现了run() 原因是:
如果还有
class C extends O
{}
class D extends O
{}
但它们未覆写 run(),
因为它们就想用父类O中的run()
这难道不是另一种形式的多态的应用吗??
2 说接口是为了实现多重继承的也不对,请看:
class A
{
class B extends O1{}
class C extends O2{}
pubic void run()
{
B b = new B();
C c = new C();
b.run1();
c.run2();
}
}
class O1 { public void run1(){} }
class O2 { public void run2(){} }
对于类A 既用了O1的函数run1(),又用了O2 的函数run2(),
算不算实现了多重继承呢?没用接口吧
(注:inner class 也是实现多重继承的一种很方便的方式)
3 说接口中不能有属性只有功能的人也要注意了,别想当然.请看
public interface I
{
int a = 1;
int b = 2;
}
a,b算不算属性?至少不算是“功能”吧
如果有人认为我写错了,可以实际编译一下
(注:其实这是常量声明的一种方法,a,b会被自动转为static 和 final)