跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 Dart 的重定向构造函数的疑问
未分類
9 5 月 2020

关于 Dart 的重定向构造函数的疑问

关于 Dart 的重定向构造函数的疑问

資深大佬 : version0 46

上代码

class Point extends Test {   num x;   num y;   num z;   num get a {     return this.x + this.y;   }    set a(num v) {     x = v - y;   }    Point.fromJson(Map jsonMap)       : this.x = jsonMap['x'],         y = jsonMap['y'],         super.fromJson({}) {     print(this.x);     print('In Point.fromJson(): ($x, $y, $z)');   }    Point.aliasB(Map jsonMap, num z)       : this.z = z,         super.fromJson({}) {     Point.fromJson(jsonMap);   }    Point(Map jsonMap, this.z) : super(jsonMap) {     print('In Point(): ($x, $y, $z)');     x = jsonMap['x'];     y = jsonMap['y'];     print('In Point(): ($x, $y, $z)');   } }  class Test {   num x;   num y;   Test(Map map)       : x = map['x'],         y = map['y'] {     print('In Parent.Test(): ($x, $y)');   }   Test.fromJson(Map map) : this(map); }  main(List<String> args) {   new Point({'x': 1, 'y': 2}, 3);   new Test({'x': 1, 'y': 2}); }  

执行结果

In Parent.Test(): (null, null) In Point(): (null, null, 3) In Point(): (1, 2, 3) In Parent.Test(): (1, 2) 

疑问:

1:Test 构造函数冒号右边不是赋值了吗 为啥是 null ?接受的参数打印出来是有值的

2:如果我把 Test 类的成员变量 x,y 改名字不跟子类一样,就能打印出来,这又是为啥?

希望有大佬能解答一下菜鸟的疑问

大佬有話說 (5)

  • 資深大佬 : IGJacklove

    父类和子类都有相同名字的参数,Point 的 x 就是他自己的 x,如果想访问父类 Test 的 x,用 super.x

  • 主 資深大佬 : version0

    @IGJacklove 额,你说的我知道啊,但是没解决我的问题啊,Test 类的构造方法没有给它的属性 x,y 赋值呢,是因为子类调用父类的构造方法时,不会执行父类构造方法 冒号后面的赋值语句吗?我把赋值语句放到{}里就能赋值

  • 資深大佬 : bytelee

    这样看 Point 初始化的时候 父类的 Test 的初始化里边打印的应该是 point.x point.y 所以没有赋值。

  • 主 資深大佬 : version0

    @bytelee 我给 Point 的 x、y 设置默认值后来看 确实是这样的,那是不是父类和子类变量同名的清空下,在父类的构造方法里没法访问它本身的变量了?如果能,该咋访问(加 this 还是访问的子类的)。

  • 資深大佬 : bytelee

    @version0 #4 那个里边的 this 应该也是子类的了 我其实感觉应该避免这种做法

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具