2016-10-04 13 views
0

クラスは、スーパークラスから継承したときにメソッドを追加できますが、メソッドを逆にしてメソッドを削除できますか?目標は、これらの削除されたクラスがコンパイル時にアクセスできないようにすることです。私は本質的に(新しい車())を取得しようとしています。 IDEで.d​​rive()を自動補完しないようにする。TypeScriptクラスは継承されたメソッドへのアクセスを削除できますか?

class vehicle { 
    drive() { 
     ... 
    } 
} 

class car extends vehicle { 
    //previous attempt 
    private drive() { // can't modify public/private 

    } 


} 

車がメソッドdriveを持つのを防ぐためのコンパイル時(tsc)の方法はありますか?それを削除するかアクセシビリティを変更することができますか?

+3

のようなコードを書き込むときにどうなるかを考慮する必要があります。 –

+4

継承されたメソッドを削除または非表示にすることはできません。それは[多型](https://en.wikipedia.org/wiki/Polymorphism_(computer_science))に違反します。あなたがそれを達成しようとしていることを説明して、あなたがそれが必要だと思うようにしてもらえますか? – 4castle

+5

これはクラス階層が壊れている赤い旗です。 –

答えて

3

いいえコメントに記載されているとおり、これは階層が正しくないことを示しています。派生クラスは、その基底クラスで常に置換可能でなければなりません。

あなたが誰かがSSPのtenatに違反するこの

function doSomething(y: Vehicle) { 
    y.drive(); 
} 
let x = new Car(); 
doSomething(x); 
関連する問題