授業ノートのまとめ
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
インターフェース:
public class Creature{
}
のかわりに
public interface Creature{
}
とインターフェースは宣言できる
・とにかくあいまい
・子クラスが普通たくさん
インターフェースはimplementsというキーワードを使って継承する(extendsじゃない)
・ふつうのextendsの時は多重継承を許可していない
・implementsは多重継承ができる。2つでも3つでも可。なぜか。親がふたつともインターフェースということは、中身はからっぽのメソッドだから混乱が発生しない。
どうせ自分の中でオーバーラードするため。
android stadio
最新版をDLする
https://developer.android.com/studio/?hl=ja
とりあえずインストは午後から
教科書p491
打ち込みはしたが何にも理解できないな?
しゃあない上から見ていってみましょう。
①最上位インターフェース
--->Things.java
public interface Things {
double getWeight();
void setWeight(double weight);
}
・double型でgetWeightを宣言。なかみはない。たぶん。
・そのsetterをつくってる。おわり。
②レベル2の「すべての資産」クラス
public abstract class Asset {
private String name;
private int price;//無形資産に値段はあるとのこと!
public Asset(String name, int price) {
this.name=name;
this.price=price;
}
//automatic create
public String getName() {
return this.name;
}
public int getPrice() {
return this.price;
}
}
ここで起こっていること:
・このひとは最上位インターフェースを受け継ぐ宣言がないな?
・abstractがclassの前に付いているので、これが抽象クラスと分かる。よってこの部分はインスタンス化できずミスから保護される。
・private String name;
private int price;
が宣言。
③レベル3の「有形資産」のクラス
--->TanbibleAsset.java
public abstract class TanbibleAsset extends Asset implements Things{
private String color;
private double weight;
public TanbibleAsset(String name, int price, String color) {
super(name, price);
this.color = color;
}
//自動生成
public String getColor() {
return this.color;
}
public double getWeight() {
return this.weight;
}
public void setWeight(double weight) {//たぶんオーバーライド
this.weight = weight;
}
}
ここで行われていること:
extends Assetとimplements Thingsの二重継承
abstractがclassの前に付いているので抽象クラスである。newできない。
colorとweightの宣言
びっくりするぐらいざっくりとsuperで継承。どっちから継承するかすら書いてない。スゴイ。これがjavaか。(可能性的に)継承先はAssetしかない。
④レベル4の「本」とか「こんぴゅーた」のクラス
--->Book.java
//package exercise;
public class Book extends TanbibleAsset{
private String isbn;
public Book(String name, int price, String color, String isbn) {
//this.name = name;
//this.price = price;
//this.color = color;
super(name,price,color);
this.isbn = isbn;
}
public String getIsbn() { return this.isbn; }
}
・TanbibleAssetをextends
・bookが新たに持たされたフィールドは、isbnだけである。
--->computer.java
//package exercise;
public class Computer extends TanbibleAsset{
//親クラスに持たせたためコメントアウトす
//private String name;
//private int price;
//private String color;
private String makerName;
public Computer(String name, int price, String color, String makerName) {
//this.name = name;
//this.price = price;
//this.color = color;
super(name,price,color);
this.makerName = makerName;
}
//public String getName() { return this.name; }
//public int getPrice() { return this.price; }
//public String getColor() { return this.color; }
public String getMakerName() { return this.makerName; }
}
TanbibleAssetをextendsしている
ここでも親が持ってるものはsuperでぶん投げ。
コンピュータで新たに持たされたフィールドはMakerNameのみ。
◎実行用
--->Main491.java
public class Main491 {
public static void main(String[] args) {
Book b = new Book("本1",1000,"黄色","1234");
Computer c = new Computer("PC1",1000,"黒","SONY");
b.setWeight(10);
c.setWeight(20);
System.out.println(b.getName()+ "の重さ:" + b.getWeight());
System.out.println(c.getName()+ "の重さ:" + c.getWeight());
}
}
色と太字をつけてやっと構造が理解できた。
多態性:
とりあえず親の型の箱に入れるという性質
Character - SuperHero
今まで:
SuperHero h = new SuperHero();
多態性の記述:
Character c = new SuperHero();
is-aの関係
superhero is a character → ok
スーパーヒーローはキャラクターだ。ありだ。
ただにんげんさんは聞けば常識で判断できるが、コンピューターさんはハテナなので、javaにおいて継承関係でクラスがつながっていればすっとび代入( Character c = new SuperHero(); )ができる。というわけ。
親の箱には入れることができるということ。この場合親がインターフェースであっても可能である(newはできない)
Life hoge = new Wizard();
//Lifeはインターフェース
android stadio インストール:
うさぎをぐーぐるにおくるか?とか聞かれたときだけ
Don't sendで。
あとはnextでインストール。