[Java]注目に値するいくつかの文法上のポイント2

1.次のどの行でエラーが発生しますか?

1
2
3
4
1 byte a1 =  2 , a2 =  4 , a3;
2 short s =  16 ;
3 . a2 = s;
4 . a3 = a1 * a2;

3行目と4行目。

ショートタイプをバイトタイプにキャストすることはできません。

a1 * a2はバイト型をint型にキャストする必要がありますが、これは許可されていません


2.2。 

class Person {
    String name = "No name";
    public Person(String nm) {
        name = nm;
    }
}
class Employee extends Person {
    String empID = "0000";
    public Employee(String id) {
        empID = id;
    }
}
public class Test {
    public static void main(String args[]) {
        Employee e = new Employee("123");
        System.out.println(e.empID);
    }
}
编译错误:暗黙のスーパーコンストラクターPerson()は未定義です。別のコンストラクターを明示的に呼び出す必要があります

Java継承では、サブクラスは構築メソッドを継承せず、暗黙的または明示的に呼び出すだけです。

実際、記述していない場合、システムは親クラスの引数なしの構築メソッドを暗黙的に呼び出します。

また、クラスの場合、パラメーター構築メソッドを作成した後、パラメーター構築メソッドは生成されなくなります。

次に、親クラスにパラメーターのない構築メソッドがない場合は、パラメーターを含む構築メソッドがあります。

サブクラスを作成するときは、サブクラスのコンストラクターの最初の行で、親クラスのパラメーター化されたコンストラクターを明示的に呼び出す必要があります。

親クラスのパラメトリックコンストラクターを明示的に呼び出さない場合、システムはデフォルトで親のパラメトリックコンストラクターを呼び出します。

ただし、現時点では、親クラスにパラメーターのない構築メソッドがないため、上記のコンパイルエラーが発生します。

Employeeクラスの構築メソッドを次のように変更して、コンパイルして渡します。

 public Employee(String id) {
    	super(id);
        empID = id;
    }

3.クラスBはクラスAから派生し、クラスBはクラスAのパブリックメンバーと保護されたメンバーにアクセスできます。親クラスのプライベートメンバーには、現在のクラスでのみアクセスできます。

4.一般的なスレッドセーフクラス:StringBuffer 、Vector、Hashtable、Stack


おすすめ

転載: blog.csdn.net/michellechouu/article/details/48739079