Java中的上下转型
见下边的程序段
package test;
class A {
public String f(A obj)
{
return("A");
}
}
class B extends A {
public String f(B obj)
{
return("C");
}
public String f(A obj)
{
return("D");
}
}
我们使用子类创建一个对象:
B b = new B();
然后再将这个子类的引用放到父类对象中:
A a;
a = b;
那么这个父类对象a是子类对象b的上转型对象,对象的实体由子类负责建立,实质还是子类,只是损失了一些功能而已,这样的得失具体如下:
得:上转型对象可以操作和使用子类继承或者重写的方法。
失:上转型对象丧失了对子类新增成员变量或新增的方法的操作和使用。
那么下边的这段测试代码的打印结果就是“D”,因为a2只能有public String f(A obj) 这个方法是可以用的。
public class TestObj
{
public static void main(String args[])
{ A a1 = new A();
A a2 = new B(); //子类对象转化为父类,称为上转型,不需要强制转换。
B b = new B();
System.out.println(a2.f(b)); //“D”
System.out.println();
if (a2 instanceof B) {
B b1 = (B) a2; //父类对象转化为下转型,此时需要使用强制转换,此时需要先判断要转换的这个对象(也就是a2指向的这个对象)是不是B类的实例
System.out.println(b1.f(b));//"C"
 
相关文档:
import java.lang.reflect.*;
public class A extends Thread {
public static void main(String[] args) throws Exception{
CC cc = new CC();
HH hh = new HH(cc);
II ii = (II) Proxy.newProxyInstance(H ......
String phoneEL="[0-9]{4}-[0-9]{6}";
String urlEl="<a.+href*=*['\"]?.*?['\"]?.*?>";
String emailEl="^[_a-z0-9-]+(.[_a-z0-9-]+)*"+"@[a-z0-9-]+([.][a-z0-9-]+)*$"; ......
结构模式(-)
Adapter(适配器)
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Adapter分为2种:
类适配器和对象适配器。Adapter和Adaptee之间是is-a关系的时候,属于类适配器,Adapter和Adaptee之间是has-a关系的时候,属于对象适配器。 ......
JAVA四种基本排序,包括冒泡法,插入法,选择法,SHELL排序法.其中选择法是冒泡法的改进,SHELL排序法是 插入法的改进.所以从根本上来说可以归纳为两种不同的排序方法:即:插入法&冒泡法
一 插入法:遍历排序集合,每到一个元素时,都要将这个元素与所有它之前的元素遍历比较一遍,让符合排序顺序的元素挨个移动到当前范围内它最 ......
原文传送门:http://www.blogjava.net/improviser/archive/2008/12/07/244911.html
在前一篇文章中简单介绍了JAVA程序如何调用Oracle存储过程的基本语法程序结构, 本文将介绍JAVA跟Oracle的另一种关系,即通过JAVA编写Oracle存储过程。 通常情况下,我们都是使用Oracle数据库系统中的ps/sql语句来为oracle编写 ......