abstract class

  • 抽象的なクラスである
  • 抽象的なメソッドを持つことができる
  • new クラス名() はできない
  • ↑により直接propartyをいじることはできない

直接いじること、変更することができないから継承し、その継承したクラスからproparty,methodを実行して、呼び出し、追加、削除などをする

abstract
abstract class Describable {
  void describe();
  void describeWithEmphasis() {
    print('========');
    describe();
    print('========');
  }
}

class MyTitle extends Describable {
  void describe() => {print('mytitle')};
}

class MySubtitle implements Describable {
  void describe() => print("Development Division");
  void describeWithEmphasis() {
    print('********');
    describe();
    print('********');
  }
}

main() {
  new MyTitle().describeWithEmphasis();
  new MySubtitle().describeWithEmphasis();
}

Describable...抽象的なクラス
describe()...抽象的なメソッド
MyTitle,MySubtitile...Describableを継承している(継承のしかたは違う)

extends

継承する抽象クラスの未実装メソッドを実装のこと
この場合 describe()(未実装のメソッド)を実装する

implements

実装する抽象クラスのメンバの総てを実装のこと
全てのメソッドなのでDescribableで実装されているdescribeWithEmphasisも実装し直さないといけない

イテレーター

イテレーターの理解時にabstractも理解したのでiteratorも説明する

iterator
main() {
  List fruits1 = ['apple', 'pears', 'bananas'];
  Set fruits2 = new Set();
  fruits.add('grapes');
  fruits.add('apple');
  fruits.add('pine');

  Iterator iterator1 = fruits1.iterator;
  Iterator iterator2 = fruits2.iterator;
  while (iterator1.moveNext()) { //
    var fruit = iterator.current;
    print('${fruit} is tasty');
  }
}

イテレーターとは

iterableなオブジェクト(List,Set,dart:collectionでimportするほとんど)の要素一つ一つをloop処理する時によく使われる
fruits1.iterator は fruits1 は Listであり Listはiterableクラスを継承しているクラスであるのでiterableクラスのプロパティであるiteratorを使用可能
ちなみにfruits1.iteratorはgetで返り値はiteratorオブジェクトである。(iteratorもクラス)

自分なりにこのiteratorがどのように動いているか想像しコードにした

iteratorSimulation
abstract class Iterable {
  String iteratorString;
  void setItr(setIterator);

  String get iterator;
  void set iterator(String a);
}

class List extends Iterable {
  setItr(setIterator) {
    iteratorString = setIterator;
  }

  String get iterator => iteratorString;
  void set iterator(String setIterator) {
    setItr(setIterator);
  }
}

main() {
  var newList = new List();
  newList.iterator = 'setting iteratorString';
  print(newList.iterator);
}

iterableという抽象クラスをListクラスが継承しpropartyであるget,set iteratorの抽象メソッドを継承し実装している(直接get,setはabstractだからできないため)
その実装してものをnew List()した後setしてiteratorStringを変更し、getしている

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.