“但是,我觉得这样,直接用对象B或者C,建立实例,然后引用方法fun(),不也行吗? 这样还省去了赋值一步...” 你一开始并不一定知道调用的是B还是C,而且你以后可能又会创建一个D implements A 然后把D的实例赋给a 这样做的目的是考虑到可扩展性
class classname implements interface1,interface2...
用在向上转型时如: public class A { public void fun() { System.out.println("funA"); }} public class B extends A { public void fun() { System.out.println("funB"); } } public class C { public void fun(A a) { a.play(); } public static main(String args[]) { A a = new B(); fun(a); } } 如果不是这样,你为每一个对象都写上相应的函数如 public void fun(A a) { a.play(); } public void fun(B a) { b.play(); } 你还必须生成相应的对象,一个是不容易扩展,程序也显得冗余.
哦,更正一下 public class A { public void fun() { System.out.println("funA"); }} public class B extends A { public void fun() { System.out.println("funB"); } } public class C { public void fun(A a) { a.play(); } public static main(String args[]) { A a = new B(); fun(a); } }更正如下 public class A { public void fun() { System.out.println("funA"); }} public class B extends A { public void fun() { System.out.println("funB"); } } public class C { public void fun(A a) { a.fun(); } public void fun(B a) { b.fun(); } public static main(String args[]) { A a = new A(); B b = new B(); fun(a); fun(b); } }。 也就是说没有多态的机制,你必须生成每个相应的对象,才能达到相应的调用, 显然不利于调用和扩展.
把对象B或者C赋到a上这样a.fun()是可以在根据对象而调用不同的fun()但是,我觉得这样,直接用对象B或者C,建立实例,然后引用方法fun(),不也行吗?
这样还省去了赋值一步...
这样还省去了赋值一步...”
你一开始并不一定知道调用的是B还是C,而且你以后可能又会创建一个D implements A
然后把D的实例赋给a
这样做的目的是考虑到可扩展性
public class A
{
public void fun()
{
System.out.println("funA");
}}
public class B extends A
{
public void fun()
{
System.out.println("funB");
} }
public class C
{
public void fun(A a)
{
a.play(); }
public static main(String args[])
{
A a = new B();
fun(a);
}
}
如果不是这样,你为每一个对象都写上相应的函数如
public void fun(A a)
{
a.play(); }
public void fun(B a)
{
b.play(); }
你还必须生成相应的对象,一个是不容易扩展,程序也显得冗余.
方法play()应该在什么地方呢
一般接口用于设计上
不考虑设计的情况下[i.e.完成某一功能]interface可以说是多余的
所以说建议先看一下设计模式[GOF]
因为JAVA不支持多重继承
如果你的程序中要用到A类的方法 和B类的方法
但是你只能继承其中的一个类
这个时候你要是继承了A类
那么B类的方法 你要是想使用的话就的在你自己的新类之中创建
当然了 方法少的话无所谓 多的话就很麻烦了
这个时候接口就很方便了
你可以定义一个接口在其中定义
A和B的方法
然后实现他就简单的多了
这只是我自己的看法
就算交流一下好了
其他人看看我说的对吗?
public class A
{
public void fun()
{
System.out.println("funA");
}}
public class B extends A
{
public void fun()
{
System.out.println("funB");
} }
public class C
{
public void fun(A a)
{
a.play(); }
public static main(String args[])
{
A a = new B();
fun(a);
}
}更正如下
public class A
{
public void fun()
{
System.out.println("funA");
}}
public class B extends A
{
public void fun()
{
System.out.println("funB");
} }
public class C
{
public void fun(A a)
{
a.fun(); }
public void fun(B a)
{
b.fun(); }
public static main(String args[])
{
A a = new A();
B b = new B();
fun(a);
fun(b);
}
}。
也就是说没有多态的机制,你必须生成每个相应的对象,才能达到相应的调用,
显然不利于调用和扩展.