##abstract class
- 抽象的なクラスである
- 抽象的なメソッドを持つことができる
- new クラス名() はできない
- ↑により直接propartyをいじることはできない
直接いじること、変更することができないから継承し、その継承したクラスからproparty,methodを実行して、呼び出し、追加、削除などをする
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も説明する
main() {
List fruits1 = ['apple', 'pears', 'bananas'];
Set fruits2 = new Set();
fruits2.add('grapes');
fruits2.add('apple');
fruits2.add('pine');
Iterator iterator1 = fruits1.iterator;
Iterator iterator2 = fruits2.iterator;
while (iterator1.moveNext()) {
var fruit = iterator.current;
print('${fruit} is tasty');
}
while (iterator2.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がどのように動いているか想像しコードにした
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している
##バグ修正
@shinriyo3修正リクエストありがとうございます。おくれてすみませんでした。