一个对象只能有一种确切类型
虚方法调用--后期绑定
instance判断变量的类型
public boolean equals(Object o){
if(o instanceof Bird){
Bird bird = (Bird)o;
//调用 Bird的方法
bird.fly();
}
}
所谓造型就是java对象间的类型转换
java的对象造型可以分为两种情况:
--自动造型
--强制造型
在造型前可以使用instanceof 运算符测试一个对象的类型
o instanceof SuperMan
o instanceof Man
对象的造型只用在有继承关系的对象之间
抽象类可以有构造器,既可以有抽象方法,也可以有实现的方法,接口除了抽象方法,没有其
他方法,接口可以继承多个接口,抽象类只能继承一个父类
接口较灵活,应多用接口,少用抽象类
能够进行相互转型的类或对象必须位于同一棵继承树上。编译器会检查转型的合理性。
public class Animal{
protected int legs;
protected Animal(int legs){
this.legs = legs;
}
}
public class Spider extends Animal{
public Spider(){
super(8);//由于父类未提供默认的构造函数,所以必须调用父类的有参构造器
}
}
多态的实现条件:1:有继承;2:有重写;3:父类引用指向子类对象
调用构造函数必须是构造器的第一条语句,在普通方法中,不能调用构造器
内部类
允许一个类的定义出现在另一个类中,将处于另一个类中的“寄生类”称为“内部类”,也称为“类属类“
内部类其实看成是外部类的一个属性。
异常:
不要指望你的程序永远不会出错
java程序运行过程中所发生的异常事件可分为两类:
--错误:jvm系统内部错误,资源耗尽的呢个严重情况
--异常:其他因编程错误或偶然的外在因素导致的一般性问题,例如:
对负数开平方根
空指针访问
试图读取不存在的文件
网络连接中断
java中除以零:
1/0 -1/0 0/0 均产生异常;
1.0/0 -1.0/0 0.0/0 分别为Infinity -Infinity NaN
1/0.0 -1/0.0 0/0.0 分别为Infinity -Infinity NaN
1.0/0.0 -1.0/0.0 0.0/0.0 分别为Infinity -Infinity NaN
可见,当为除零时两个都是整数时会发生异常,有一个是double时分别为Infinity -Infinity NaN
可以用类似语句来检测无穷大 if (Double.isInfinite(e)) System.out.println("检测到无穷大");
double c = 1.0, d = 0;
if(Double.isInfinite(c / d))
System.out.println("infinity");