黑马程序员技术交流社区

标题: 强行转换是如何实现的?希望能详细的说明下 [打印本页]

作者: —__    时间: 2012-5-1 14:03
标题: 强行转换是如何实现的?希望能详细的说明下
如 以下代码

String s = (String)it.next

在比如
import java.util.*;
class Person
{
private String name;
private int age;
Person (String name,int age)
{
  this.name=name;
  this.age = age;
}
public String getName()
{
  return name;
}
public int getAge()
{
  return age;
}

}
class ArrayListTest2
{
public static void sop(Object obj)
{
  System.out.println(obj);
}
public static void main(String[] args)
{
  ArrayList al = new ArrayList();
  al.add(new Person("lisi01",30));
  al.add(new Person("lisi02",32));
  al.add(new Person("lisi02",32));
  al.add(new Person("lisi03",33));
  al.add(new Person("lisi04",35));
  al.add(new Person("lisi04",35));
  Iterator it = al.iterator();

  while(it.hasNext())
  {
   Person p = (Person)it.next();
   sop(p.getName()+"::"+p.getAge());
  }

}
}

其中的  Person p = ( person)it.next();



视频中说的为多态的向下转型 ,随后多态转换的视频我又看了一遍,里面中有动物和猫的转换
Cat c =(cat)a; //解释为 强制将父类的引用。转成子类类型。
随后又查找了一遍子父类的视频 结果没有找到相关的介绍
“<>转换方式我能理解”
于是有了以下的疑问:
1.  (cat) 或(person) 或(String) 是什么意思?相当与什么代码?强制是如何强制的?
2.(Cat)或者 Person p = ( person)it.next(); 中的(Person)是固定位置,固定写法吗?写在其他部位行不行?

3.如果有详细介绍这部分的视频,希望能说下在那部分,我去多看几遍
作者: 马浩    时间: 2012-5-1 14:52
按楼主说的,cat或person只是我们定义的类,拿cat c=(cat)a来说吧, 在视频中,a本来是一个父类的对象,现在想让它访问子类也就是cat类中的方法,必须类型转换,
也就是把父类的对象a转成cat类,这个类似于基本类型的转换,如int x=2;byte y=(byte) x+3;将整型x转为byte型
String相当于是一个对象,可以用来引用字符串;


作者: 刘基军    时间: 2012-5-1 14:54
Animal a = new Animal();
Cat c = new Cat();
a = c;
Cat c2 = (Cat) a;  //将a所指向的对象,强制转换为Cat类型: 使用(Cat)来实现强制转换---注: "(Cat)"应该写在我们想要转换的变量前面
注意:因为在上边将a指向了c: a=c,即a的实际类型是Cat类型,所以我们这边才能使用强制转换,否则是不可以强制转换的
作者: 黑马任雪刚    时间: 2012-5-1 16:08
(cat) 或(person) 或(String)都是指被强制转换后的所属类型。以其中的(person)为例:本来it.next()返回的是一个Object(是所有类的父类,类的祖先)类的对象,而你却把it.next()赋给了Person对象,这时你就需要把父类的应用强制转化为子类。
其中的代码表现形式为:
Object obj = it.next();
所以需要Object向下转型:
person p = (person)it.next();
再举个强制装换的例子:
short i = 5;//声明一个short类型的变量i.
int b = 6;//声明一个int类型的变量b.
short n=(short)(i+b);//当(i+b)在进行运算的时候,将会进行一次自动提升动作,将小容量的short类型提升为大容量的int类型。
  //此时(i+b)已经变为int类型,当把int类型的(i+b)赋给short类型的变量n时就发生了类型的强制转换。那是因为:
                //如果将(i+b)赋给n时将会损失精度。(也就是如果你把一大碗水倒到小杯时一定会溢出的道理一样)。
作者: —__    时间: 2012-5-1 16:21
看了你们的结论花了个图 现在懂了 真心感谢 原来是我太纠结与()小括号了{:soso_e127:} 根据你们说的 想起来前面的知识了 ,真心感谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2