1. Which lines of the following will produce an error?
3. 类B从类A中派生,那么类B可以访问类A的public成员,protected成员。而父类的private成员只能在当前类中访问。
1
2
3
4
|
1
.
byte
a1 =
2
, a2 =
4
, a3;
2
.
short
s =
16
;
3
. a2 = s;
4
. a3 = a1 * a2;
|
line 3 and line 4.
short类型不能强制转换为byte类型。
a1 *a2需要将byte型强制转换为int型,而这是不被允许的
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);
}
}
编译错误:Implicit super constructor Person() is undefined. Must explicitly invoke another constructor
Java的继承中,子类是不继承构造方法的,只隐式或显式地调用。
不写的时候,其实系统是隐式地调用了父类的无参构造方法。
另外,对于一个类来说,创建有参构造方法后,就不再生成无参构造方法。
那么,如果父类中没有无参构造方法,有含参构造方法。
在创建子类时,必须在子类的构造方法的第一行显式地调用父类的有参构造方法。
如果不显式调用父类有参构造方法,系统会默认调用父类的无参构造方法,
但这时父类并没有无参的构造方法,那么就会出现上面的编译错误。
将Employee类的构造方法改为下面这样就编译通过了:
public Employee(String id) {
super(id);
empID = id;
}
3. 类B从类A中派生,那么类B可以访问类A的public成员,protected成员。而父类的private成员只能在当前类中访问。
4. 常见线程安全的类:StringBuffer, Vector, Hashtable, Stack