强转(父类使用子类初始化时才能进行强转)
直接转会提示数组强转错误。
List<String> list = new ArrayList<>();
String [] s = (String[])list.toArray();
解决方案:
String [] ss = list.toArray(new String[list.size()]);
问题:
Object数据不能强转成String,但是注意Object类型中的初始化时用String是可以强转的。
下列代码正常运行:
```java
List ls = Arrays.asList("aqua","bingtang","youtang");
Object []s = ls.toArray();String [] b = (String[])s;
for (String s1 : b) {
System.out.println(s1);
}
```
这是为什么呢?因为toArray返回的是Object[]
public Object[] toArray() {
return Arrays.copyOf(elementData, size);
}
而Array.asList返回的是T即String类型
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
异常(子类方法不能抛出比父类范围更大的异常)
1. **子类在覆盖父类时,**如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。或者不抛。
2. 如果父类或者接口的方法中,没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。发生异常必须进行try处理。
run方法在Thread类中,或者Runnable中都没有抛出异常,所以在继承Thread类或者实现Runnable的时候也不能抛出异常。
只能修改父类来进行抛出异常,但无法修改。