标签:
1、编译器查看对象的声明类型和方法名。当调用
x.f(param);
且隐式参数x生命为C类对象。这时候可能有多个名字都叫f,但是参数类型不一样的方法。编译器会一一列举C类中名为f的方法和其超类中访问属性为public并且名为f的方法。(超类的私有方法是不能访问的)
进行到这里的时候编译器已经获得了可能被调用的所有的候选方法。
紧接着,编译器就会开始查看调用犯非法提供的参数类型。如果在所有名为f的方法中存在一个与提供的参数类型完全匹配,就选择这个方法。这个过程被称为重载解析。
到这个时候编译器已获得需要调用的方法名字和参数类型。
2、有时候,不希望利用某个类定义子类,不允许扩展的类成为final类。
例如,当想阻止定义Executive类的子类,就可以定义这个类的时候使用final修饰符。
final class Executive extends Manager { ······ }
类中所有的特定方法也会被声明为final。如果这样做,子类就不能覆盖这个方法。(final类中所有的方法自动的成为final方法)
例如:
class Exployyee { ······ public final String getName() { return name; } ······ }
如果将一个类声明为final,只是其中的方法自动成为能够为final,而不包括域。
3、强制类型转换
我们都学过将一个类型强制转换为另一个类型:
double x = 3.405; int nx = (int)x;
表达式x的值就会被转换为整数类型,舍弃了小数部分。
有时候我们也会需要将某个类的对象引用转换成另外一个类的对象使用,例如:
Manager boss = (Manager) staff[0];
在进行类型转换之前我们可以先查看一下是否能够转换成功,这个过程使用instanceof就可以实现。
if (staff[1] instanceof Manager) { boss = (Manager) staff[1]; ······ }
类型转换的法则:
只能在继承层次内进行类型转换。
在将超类转换成子类之前,应该使用instanceof进行检查。
标签:
原文地址:http://www.cnblogs.com/liuxuanqing/p/5747886.html