动态多态

public interface Ipower {
    public abstract void tigongdianyuan();
}

动态多态:指系统A访问系统B的服务时,系统B可以通过多种实现来提供服务,而这一切对于A来说都是透明的

public class ACPower implements Ipower {

    public void tigongdianyuan() {
        System.out.println("适配器提供电源");

    }

}
public class Barry implements Ipower {

    public void tigongdianyuan() {
        System.out.println("电池提供电源");

    }

}
public class Computer {

    public void kaiJi(Ipower pow){
        pow.tigongdianyuan();
        System.out.println("开机了");
    }

}
public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Computer c = new Computer();
        ACPower ac = new ACPower();
        Barry ba = new Barry();
        c.kaiJi(ba);
    }

}
时间: 2024-10-26 21:26:54

动态多态的相关文章

C++ 静态多态和动态多态 浅析

今天的C++已经是个多重泛型编程语言(multiparadigm programming lauguage),一个同时支持过程形式(procedural).面向对象形式(object-oriented).函数形式(functional).泛型形式(generic).元编程形式(metaprogramming)的语言. 这些能力和弹性使C++成为一个无可匹敌的工具,但也可能引发使用者的某些迷惑,比如多态.在这几种编程泛型中,面向对象编程.泛型编程以及很新的元编程形式都支持多态的概念,但又有所不同.

静态多态和动态多态

多态 多态就是多种形态,C++的多态分为静态多态和动态多态. 静态多态就是重载,因为是在编译期决议确定,所以称为静态多态. 动态多态就是通过继承重写基类的虚函数实现的多态,因为是在运行时决议确定,所以称为动态多态. class Base { public : virtual void func1() { cout<<"Base::func1" <<endl; } virtual void func2() { cout<<"Base::fun

polymorphism-多态(函数多态、宏多态、静态多态、动态多态)

多态(polymorphism) 字面上意思--多种形态,即同一种方法的行为随上下文而异. 维基百科:Polymorphism (computer science), the ability incomputer programming to present the same interface for differing underlyingforms (data types). 1.函数多态(function polymorphism):也即是函数重载(functionoverloading

分析多继承下的动态多态。

一.首先我们先了解一下三个概念: 1.重载.2.隐藏.3.覆盖(重写) 如何实现重载?--2个条件: 1-在同一作用域内. 2-两个函数函数名相同,参数不同,返回值可以不同. 此时两个函数就实现了重载,当然这是C++对于C特有的,因为C的时候对参数并没有太多的考虑,C++的编译器在编译时对函数进行了重命名,所以就算是函数名相同的函数,如果参数不同,就会是不同的函数,对应不同的情况. 如何实现隐藏/重定义?--2个条件: 1-在不同作用域下,大多在继承上体现. 2-函数名相同即可. 例如在 B类公

静态多态与动态多态

面向对象编程的多态从绑定时间来看,可以分成静态多态和动态多态,也称为编译期多态和运行期多态. java中overload是静态多态,即根据参数列表进行最佳匹配,在编译阶段决定要具体执行哪个方法.而与之相反,overriden methods则是在run-time进行动态检查. 举例说明: public class UseAnimals { public void doStuff(Animal a) { System.out.println("Animal"); } public voi

C/C++ 静态多态与动态多态

静态多态就是在系统编译期间就可以确定程序执行到这里将要执行哪个函数,比如函数的重载. 动态多态则是利用虚函数实现了运行时的多态,也就是说在系统编译的时候并不知道程序将要调用哪一个函数,只有在运行到这里的时候才能确定接下来会跳转到哪一个函数的栈帧. 虚函数就是在基类中声明该函数是虚拟的(在函数之前加virtual关键字),然后在子类中正式的定义(子类中的该函数的函数名,返回值,函数参数个数,参数类型,全都与基类的所声明的虚函数相同,此时才能称为重写,才符合虚函数,否则就是函数的重载),再定义一个指

Java多态——代码复用性

Java中,多态的意为相同的行为,不同的实现. 其中,多态又分为静态多态和动态多态.两者的区别在于:前者在编译器就可以确定运行期的最终结果,即编译时就可以确定调用哪个方法:而后者在编译期则不能确定运行效果,只有运行后,依据所绑定对象的的不同,才能确定运行效果,即运行中系统才能确定方法所指的对象.静态多态主要体现在方法的重载和单独使用方法重写上,而动态多态体现为动态绑定和方法的重写上. 引入动态绑定的概念之前,需要先了解转型技术.转型即数据类型的转换,通常发生在赋值符号左右两边数据类型不同的时候.

JAVA基础——面向对象三大特性:封装、继承、多态

JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据.     隐藏类的实例细节,方便修改和实现. 3.封装的实现步骤 需要注意:对封装的属性不一定要通过get/set方法,其他方法也可以对封装的属性进行操作.当然最好使用get/set方法,比较标准. A.访问修饰符 从表格可以看出从上到下封装性越来越差. B.this关键字 1.this关键字代表当前

多态&amp;虚函数

(1).对象类型: a.静态类型:对象声明时的类型,编译的时候确定 b.动态类型:对象的类型是运行时才能确定的 class A {}; class B:public A {}; int main() { B* b; A* a=b;//a的静态类型是A*,动态类型(运行时)类型是B* return 0; } (2).多态 a.静态多态:函数重载.泛性编程 int Add(int a,int b) { return a+b; } float Add(float a,float b) { return