class Product
{
}
class Mobile extends Product
{
}
class Market
{
public void buy(Product product)
{
System.out.println("Search a product in market");
}
public void buy(Mobile mobile)
{
System.out.println("Search a mobile in market");
}
}
c
我理解解决方案的实现和双分派/访问模式,但是我不知道在编译时和运行时我们需要这种模式会发生什么。
例如,这段代码:
#include <iostream>
class A {
public:
};
class B : public A {
};
class F {
public:
virtual inline void operator()(const A&) const noexcept {
std::cout << "FxA" << std::endl;
}
virtual inline
在下面的代码中,我希望调用a.Generate(v)会导致调用V.Visit(A a),因为当Generate被称为this类型为A. Hoewever时,似乎this被看作是Inter。
如果不显式地在A和B中实现(相同的)方法,并且只在共享基类上实现,那么是否有可能有预期的行为?如果是的话,如何才能取得成功呢?
using System;
using System.Diagnostics;
namespace Test {
class Base {}
class Inter: Base {
public virtual void Generate(V v)
我有一些模型类和一个控制器(经理)类。理想情况下,控制器需要处理具体的模型类型而不执行向下转换(这似乎是“正确的”)。我想到了访问者模式和抽象工厂模式。下面是我的模型层次结构的一个例子:
class Animal {};
class Dog : public Animal {};
class Cat : public Animal {};
当我的解析器处理我们的数据文件(XML)时,某些元素类型映射到不同(但相关的)派生类型。在我的示例中,我们的XML定义了不同的动物,我们通过序列化类中的工厂方法将适当的具体类型映射到每个动物(因为它们持有的数据是不同的,并且我希望避免充当联合的单一的“动物”
我在主类中使用超类作为参数的方法。
public class MainClass() {
...
public void myMethod(MyClass class)
...
在运行时,这个对象可以是它的任何子类,它应该根据同一主类中的子类调用不同的方法
public class MainClass() {
...
public void mySubMethod(MySubClass1 class)
public void mySubMethod(MuySubClass2 class)
...
当然,我可以在枚举中使用instanceOf或静态工厂模式,但它仍然是(