継承について

自分があやふやなところを確認

public class ExtendsTest {
	
	public static void main(String[] args) {
		Hoge hoge0 = new Hoge();  // ←できない
		
		Hoge hoge  = new Piyo();
		Piyo piyo  = new Piyo();
		hogeMethod(hoge);  // ←できない
		hogeMethod(piyo);  // ←できる
		
		Hoge fuga1 = new Fuga();
		Fuga fuga2 = new Fuga();
		Fuga fuga3 = new Piyo();  // ←できない
		fuga1.baz = 'a';  // ←できない
		fuga2.baz = 'b';  // ←できる
		
		hogeMethod(fuga2);  // ←できる
	}
	
	public static Hoge hogeMethod(Piyo piyo) {
		piyo.bar = 30;
		return piyo;
	}
}

abstract class Hoge {
	int foo;
}

class Piyo extends Hoge {
	float bar;
}

class Fuga extends Piyo {
	char baz;
}
  1. 抽象クラスはインスタンス化できない
  2. 基本的に下位互換はあるが上位互換はない
  3. 下位クラスは上位クラスのコンストラクタを呼び出すことができる

勉強不足を感じた。