3、継承とインタフェース
5541 ワード
A. , public
B.
C.
D. 、
答えはCです.同じアクセス可能領域で宣言されたいくつかの異なるパラメータ列(パラメータのタイプ、個数、順序が異なる)を持つ同名関数について、プログラムは異なるパラメータ列に基づいてどの関数を呼び出すかを決定し、このメカニズムは、リロードしても関数の戻り値に関心を持たない.オーバーライドとは、生クラスに再定義された関数を割り当てます.その関数名、パラメータ列、戻り値のタイプは、親クラスのオーバーライドに対応する関数と厳密に一致する必要があります.オーバーライド関数とオーバーライドされた関数は、関数体のみが異なり、派生クラスオブジェクトが子クラスの同名関数を呼び出すと、親クラスのオーバーライドされた関数バージョンではなく、子クラスのオーバーライドされた関数バージョンが自動的に呼び出されます.
A.
B.
C.
D.
答えはCです.リロードとは、既存の関数と同名であるがパラメータテーブルが異なる関数を記述することであり、関数のリロードは関数の戻り値とは無関係である.
A.
B.
C.
D.
この問題はAを選びます.静的メソッドは上書きできません.
A. ,
B. ;
C. ,
D. “ ”,
答え:この問題はDを選びます.継承とは、子クラスのオブジェクトが親クラスのオブジェクトにのみ有効なメソッドまたはプロパティを使用できることを意味し、これらのメソッドとプロパティが子クラスによって独自に定義されているようにします.継承構造では、親クラスの内部詳細が子クラスに表示されます.したがって,継承されたコード多重化は「ホワイトボックス多重化」である.
public class B extends A {
public static void prt() {
System.out.println("2");
}
public B() {
System.out.println("B");
}
public static void main(String[] args) {
A a = new B();
a = new A();
}
}
class A {
public static void prt() {
System.out.println("1");
}
public A() {
System.out.println("A");
}
}
説明:ここで注意しなければならないのは、静的メソッドを呼び出す必要があることです.一方、
B
オブジェクトを構築する場合、B
はA
を継承するので、まずA
の構築方法を実行する必要がある.class ClassA {
public void printValue(){
System.out.println("classA");
}
}
class ClassB extends ClassA{
public void printValue(){
System.out.println("classB");
}
}
public class Test{
public static void main(String[] args) {
ClassB objectB = new ClassB();
objectB.printValue();// objectB , classB
ClassA as = (ClassA) objectB;
as.printValue();// as ClassB , ClassB
as = new ClassA();
as.printValue();// ClassA , classA
}
}
説明:関連する説明はコードに明記されています.
public class Test{
public static void main(String[] args) {
Father father = new Father();
Father child = new Child();
System.out.println(father.getName());
System.out.println(child.getName());
}
}
class Father{
public static String getName(){
return "Father";
}
}
class Child extends Father{
public static String getName(){
return "Child";
}
}
答え:ここで
Father Father
を出力します.ここで、静的メソッドは上書きできないが、メモリ内のアドレス空間は固定されているが、ここでの2つの静的メソッドはメモリ内で異なる空間を占有している.具体的にどのクラスが呼び出されるかは、静的メソッドであり、2つの参照はfather
オブジェクトであるため、Father Father
が出力される.例8:次のコードの実行結果?
public class Tester{
public static void main(String[] args) {
go(new MyBase());
}
public static void go(Base b){
b.add(8);
}
}
class Base{
int i ;
Base(){
add(1);
System.out.println(i);
}
void add(int v){
i += v;
System.out.println(i);
}
void print(){
System.out.println(i);
}
}
class MyBase extends Base{
public MyBase() {
add(2);
}
void add(int v){
i += v * 2;
System.out.println(i);
}
}
説明:まずオブジェクト
MyBase
をインスタンス化し、このオブジェクトはBase
オブジェクトを継承するので、まず方法MyBase()
を実行し、先に方法add
を実行するが、この方法はMyBase
オブジェクトを新規作成する際に呼び出され、まずMyBase
クラスにこの方法があるかどうかを検索するので、まず2,2を印刷する.このとき親クラスのコンストラクション関数が実行され、子クラスのコンストラクション関数が実行され、i=6
となる.その後add
メソッドが実行されるので、出力22.Anonymous Inner Class
)はextends
他のクラスが可能かどうか、implements
他のインタフェースが可能かどうか.答え:匿名の内部クラスは名前のない内部クラスであり、他のクラスを継承することはできませんが、1つの内部クラスは1つのインタフェースとして、別の内部クラスによって実現することができます.A.
B. ,
C.
D. ,
E.
説明:抽象クラスはいくつかの点に注意してください.
new
オペレータは使用できません.抽象クラスが抽象的な変数または値を含む場合、それらはnull
タイプであるか、または非抽象クラスのインスタンスへの参照を含む.abstract
を付けるだけで、抽象クラスです.final
).抽象クラスは親として継承されるため、final
であれば継承されない.public static final
であり、書くも書かないもである.その方法はprivate
ではなく、public abstract
でなければならず、書くか書かないかはpublic abstract
であり、マルチ継承をサポートしている.