面接問題-abstractのmethodは同時にstaticであってもよいか、nativeであってもよいか、synchronizedであってもよいか.
906 ワード
Androidプログラマー面接宝典
abstractのmethodはstaticではいけません.抽象的な方法は布団類で実現されるので、staticは子類とは関係ありません.
native法は,この方法が別のプラットフォームに依存するプログラミング言語で実現されることを示し,布団類実現の問題は存在しないため,抽象的ではなくabstractと混用できない.たとえば、FileOutputSteamクラスはハードウェアで扱われ、最下位の実装はオペレーティングシステム関連のapi実装、例えばwindowsではc言語で実装されるので、jdkのソースコードを見ると、FileOutputStreamのopenメソッドの定義は以下の通りであることがわかります.
もし私たちがjavaで他の人が書いたc言語関数を呼び出すならば、私たちは直接呼び出すことができません.私たちはjavaの要求に従ってc言語の関数を書く必要があります.また、私たちのこのc言語関数は他の人のc言語関数を呼び出す必要があります.私たちのc言語関数はjavaの要求によって書かれているので、私たちのこのc言語関数はjavaとドッキングすることができます.javaの向こうのドッキング方式は私たちのこのc関数に対応する方法を定義することです.javaの中で対応する方法は具体的なコードを書く必要はありませんが、前にnativeを宣言する必要があります.
synchronizedとabstractの併用については、私もだめだと思います.私の数年の学習と開発では、このような状況を見たことがありません.そして、synchronizedは具体的な方法に作用してこそ意味があると思います.また,メソッド上のsynchronized同期で使用される同期ロックオブジェクトはthisであり,抽象メソッドではthisが何であるかは特定できない.
abstractのmethodはstaticではいけません.抽象的な方法は布団類で実現されるので、staticは子類とは関係ありません.
native法は,この方法が別のプラットフォームに依存するプログラミング言語で実現されることを示し,布団類実現の問題は存在しないため,抽象的ではなくabstractと混用できない.たとえば、FileOutputSteamクラスはハードウェアで扱われ、最下位の実装はオペレーティングシステム関連のapi実装、例えばwindowsではc言語で実装されるので、jdkのソースコードを見ると、FileOutputStreamのopenメソッドの定義は以下の通りであることがわかります.
private native void open(String name) throws FileNotFoundException;
もし私たちがjavaで他の人が書いたc言語関数を呼び出すならば、私たちは直接呼び出すことができません.私たちはjavaの要求に従ってc言語の関数を書く必要があります.また、私たちのこのc言語関数は他の人のc言語関数を呼び出す必要があります.私たちのc言語関数はjavaの要求によって書かれているので、私たちのこのc言語関数はjavaとドッキングすることができます.javaの向こうのドッキング方式は私たちのこのc関数に対応する方法を定義することです.javaの中で対応する方法は具体的なコードを書く必要はありませんが、前にnativeを宣言する必要があります.
synchronizedとabstractの併用については、私もだめだと思います.私の数年の学習と開発では、このような状況を見たことがありません.そして、synchronizedは具体的な方法に作用してこそ意味があると思います.また,メソッド上のsynchronized同期で使用される同期ロックオブジェクトはthisであり,抽象メソッドではthisが何であるかは特定できない.