小编Fra*_*ser的帖子

从抽象基类返回子类的对象

我有一些想要序列化(反序列化)的类。我不希望代码出现在每个类中,所以我想我会创建这样的子类

public class Swan extends Animal {}
Run Code Online (Sandbox Code Playgroud)

和这样的基类:

public abstract class Animal {
   protected String name;
   // ...


   public void saveAnimal(String filename) {
       //ObjectOutputStream, save name...
   }

   public static /*returntype*/ loadAnimal(String filename) {
       //ObjectInputStream...
   }
}
Run Code Online (Sandbox Code Playgroud)

基本上我希望这个工作:

Swan s1 = new Swan("name");
s1.saveAnimal("/pathToSaveFile");
Swan s2 = (Swan)loadAnimal("/pathToSaveFile") OR 
Swan s2 = loadAnimal("/pathToSaveFile")
Run Code Online (Sandbox Code Playgroud)

如果 Animal 是抽象的,我该怎么做?如果该方法如下所示:

public static <T extends Animal> T loadAnimal(String filename) {
    //loadFromFile
    }
Run Code Online (Sandbox Code Playgroud)

我无法返回new T(name) //parameter cannot be instantiated directly。我读了一些有关反射的内容,但无法获取泛型类型 T 的类。解决方法是将类型的类传递给构造函数,但 Animal 应该是抽象的。

java abstract-class

6
推荐指数
1
解决办法
5407
查看次数

c ++如何将名称传递给基类的构造函数

我有两个类,我希望子类的每个对象都有一个名称,它作为参数传递给超类的构造函数.我该怎么做呢?

class base
{
   public:
     base(const char * name) {name = name;}
     const char * getName() {return name;};
   private:
     const char * name;
};
class derived : public base
{
   public:
     derived(const char * name) : base(name) {}
};
Run Code Online (Sandbox Code Playgroud)

然而,

int main(int argc, char **argv)
{
    derived d("test");
    std::cout << d.getName();
}
Run Code Online (Sandbox Code Playgroud)

产生乱码作为控制台输出.

c++ constructor arguments class base

1
推荐指数
1
解决办法
378
查看次数

标签 统计

abstract-class ×1

arguments ×1

base ×1

c++ ×1

class ×1

constructor ×1

java ×1