如何在Dart中实现继承?

萨尔玛

我想拥有一个继承自Dart另一个类的某些属性的类。最好的方法是什么?

这是我的父母班:

class Photo {
  final String id;
  final String owner, server, secret, title;
  final int farm, isfamily, ispublic, isfriend;
  final String url;

  Photo(
      {this.id,
      this.owner,
      this.secret,
      this.server,
      this.farm,
      this.title,
      this.ispublic,
      this.isfriend,
      this.isfamily,
      this.url});

  factory Photo.fromJson(Map<String, dynamic> parsedJson) {
    return new Photo(
        id: parsedJson['id'],
        owner: parsedJson['owner'],
        secret: parsedJson['secret'],
        server: parsedJson['server'],
        farm: parsedJson['farm'],
        title: parsedJson['title'],
        ispublic: parsedJson['ispublic'],
        isfriend: parsedJson['isfriend'],
        isfamily: parsedJson['isfamily'],
        url: parsedJson['url_m']);
  }
} 

这是我要创建的子类:

class gPhoto : Photo //inherits Photo
{
  string ownername; 
  string dateadded; 

  gPhoto(
          {this.ownername,
           this.dateadded
          });

  factory gPhoto.fromJson(Map<String, dynamic> parsedJson) {

        return new Photo(
        ownername: parsedJson['ownername'], 
        dateadded: parsedJson['dateadded'']);
}

这样行吗?Photo类的工厂将与我的新类一起使用,还是我必须为gPhoto创建一个单独的类才能映射json?

stt106

您需要检查dart语法,该语法与C#等:用于继承的语言有些不同

这是您自己执行的操作:

class Photo {
  final String id;
  final String owner, server, secret, title;
  final int farm, isfamily, ispublic, isfriend;
  final String url;

  Photo(
      {this.id,
      this.owner,
      this.secret,
      this.server,
      this.farm,
      this.title,
      this.ispublic,
      this.isfriend,
      this.isfamily,
      this.url});

  factory Photo.fromJson(Map<String, dynamic> parsedJson) {
    return new Photo(
        id: parsedJson['id'],
        owner: parsedJson['owner'],
        secret: parsedJson['secret'],
        server: parsedJson['server'],
        farm: parsedJson['farm'],
        title: parsedJson['title'],
        ispublic: parsedJson['ispublic'],
        isfriend: parsedJson['isfriend'],
        isfamily: parsedJson['isfamily'],
        url: parsedJson['url_m']);
  }
}

class gPhoto extends Photo {
  final String ownername;
  final String dateadded;

  gPhoto(
      {id,
      owner,
      secret,
      server,
      farm,
      title,
      ispublic,
      isfriend,
      isfamily,
      url,
      this.ownername,
      this.dateadded})
      : super(
            id: id,
            owner: owner,
            secret: secret,
            server: server,
            farm: farm,
            title: title,
            ispublic: ispublic,
            isfamily: isfamily,
            url: url);

  factory gPhoto.fromJson(Map<String, dynamic> parsedJson) {
    final photo = Photo.fromJson(parsedJson);
    final ownername = parsedJson['ownername'];
    final dateadded = parsedJson['dateadded'];
    return gPhoto(
      dateadded: dateadded,
      ownername: ownername,
      farm: photo.farm,
      id: photo.id,
      isfamily: photo.isfamily,
      isfriend: photo.isfriend,
      ispublic: photo.ispublic,
      owner: photo.owner,
      secret: photo.secret,
      server: photo.server,
      title: photo.title,
      url: photo.url,
    );
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章