型を無くすことが目的になっちゃダメだよね。

コンピュータにとっては型が無くても良いかもしれないが
人間にとっては型があったほうが理解しやすい。
型は人間にとって必要なもの
書くのが面倒っていうのなら、必要な所と必要ない所にわければいいじゃん

そもそも型は何かというと外部とのインターフェースだよ。
外部というのはクラスであれば、クラスの外から呼び出す時
つまりはprivateメソッドやローカル変数には型はいらない
逆にpublicメソッドには型は必要

あとメソッド名だけで区別するのはいい加減やめよう
Aというインターフェースのnameと、
Bというインターフェースのnameは意味が違う

インターフェースを複数実装するなら、
def A_name や def B_name という名前で定義できるようにするべき
外部から呼び出すときは、B_name()ってやらないといけないのか?と
思うかもしれないがそれは違う。例えばこんな感じだ

obj = Klass.new
obj.name ← これはKlassのnameメソッドが呼び出される
a = cast<A>obj
a.name ← これはKlassのAインターフェースのnameメソッドが呼び出される
b = cast<B>obj
b.name ← これはKlassのBインターフェースのnameメソッドが呼び出される

このように複数のインターフェースを持たせても適切なメソッドを呼び出せるようにできる