转自:
父类:ABC子类:Abc,AbcdABC obj1 = new Abc();ABC obj2 = new Abc();这样定义如果ABC是abstract的有一个show();子类实现了show()那么obj1.show()就是第一个子类的show();obj2.show()就是第2个子类的show();多态我的理解就是在运行时期表示的多种形态(不准就这意思)比如说我现在想写一个test 方法这个方法要调用子类的show方法那么我可以这么定义void test(ABC temp){ temp.show();}这样我如果想运行第一个子类的show()我就这样ABC obj1 = new Abc();然后test(obj1);如果想运行第2个ABC obj2 = new Abc();test(obj2);这样那个抽象类就类似一个接口,我可以用这个接口来生产东西比如说过一阵我又想写一个新的类继承它,那么class Abcde extends ABC{ void show() {... }}ABC obj3 = new Abcde();test(obj3);这样我只写了一个类,声明了一个对象而没有改变原来的代码,直接调用我新写的类即可,完成了代码的重用以后我再想写新的类只需再这么做而不必改动原来的代码,这个接口就好像能预测将来发生的事,将来完成的东西只要满足这个接口都可以调用这个函数而不必重新写
EX CODE:
Java code
abstract class A {
public abstract void doSomething();
}
class B extends A {
public void doSomething() {
System.out.println("do B");
}
}
class C extends A {
public void doSomething() {
System.out.println("do C");
}
}
public class Test {
public static void main(Stringp[] args) {
A a1 = new B();
A a2 = new C();
B b = new B();
C c = new C();
doSomething(a1); //这里
doSomething(a2); //这里
doSomething(b); //这里,如果下面的方法不是用抽象类作参数,比如用C c做参数,这里会有什么问题?
doSomething(c); //这里
}
public static void doSometing(A a) {//这里,用抽象类,为什么,LZ自己思考
a.doSomething();
}
}
阅读(544) | 评论(0) | 转发(0) |