【Java】值得注意的一些语法点2

1. Which lines of the following will produce an error?

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


猜你喜欢

转载自blog.csdn.net/michellechouu/article/details/48739079