一、怎样判断对象是否可以转换?
可以使用instanceof运算符判断一个对象是否可以转换为指定的类型:
程序截图:
结果截图:
二、类型转换
实验截图:
结论:子类可直接赋给基类(“基类变量=子类对象”);基类的引用类型要传递给子类必须通过强制转换(“子类变量=(子类名)基类对象”);子类之间不可以进行转换。
三、变态类
程序截图:
程序截图:
原因及结论:
当子类与父类拥有一样的方法,并且让一个父类变量引用一个子类对象时,到底调用哪个方法,由对象自己的“真实”类型所决定,这就是说:对象是子类型的,它就调用子类型的方法,是父类型的,它就调用父类型的方法。 这个特性实际上就是面向对象“多态”特性的具体表现。
如果子类与父类有相同的字段,则子类中的字段会代替或隐藏父类的字段,子类方法中访问的是子类中的字段(而不是父类中的字段)。如果子类方法确实想访问父类中被隐藏的同名字段,可以用super关键字来访问它。 如果子类被当作父类使用,则通过子类访问的字段是父类的!
四、关于异常
程序源代码:
import javax.swing.*;
class AboutException
{
public static void main(String[] a)
{
int i=1, j=0, k; k=i/j;
try
{
k = i/j; // Causes division-by-zero exception //throw new Exception
("Hello.Exception!");
}
catch ( ArithmeticException e)
{
System.out.println("被0除. "+ e.getMessage());
}
catch (Exception e)
{
if (e instanceof ArithmeticException) System.out.println("被0除");
else
{ System.out.println(e.getMessage());
}
}
finally
{
JOptionPane.showConfirmDialog(null,"OK");
}
}
}
程序截图:
(第7行中主函数Zero出现异常)
五、CatchWho.java
程序截图:
结果截图:
六、finally语句块一定会执行吗?
结果截图:
结果截图:
结论:finally语句不一定执行。