A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如 以下代码

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.如果有详细介绍这部分的视频,希望能说下在那部分,我去多看几遍

4 个回复

倒序浏览
按楼主说的,cat或person只是我们定义的类,拿cat c=(cat)a来说吧, 在视频中,a本来是一个父类的对象,现在想让它访问子类也就是cat类中的方法,必须类型转换,
也就是把父类的对象a转成cat类,这个类似于基本类型的转换,如int x=2;byte y=(byte) x+3;将整型x转为byte型
String相当于是一个对象,可以用来引用字符串;

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
Animal a = new Animal();
Cat c = new Cat();
a = c;
Cat c2 = (Cat) a;  //将a所指向的对象,强制转换为Cat类型: 使用(Cat)来实现强制转换---注: "(Cat)"应该写在我们想要转换的变量前面
注意:因为在上边将a指向了c: a=c,即a的实际类型是Cat类型,所以我们这边才能使用强制转换,否则是不可以强制转换的

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
(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时将会损失精度。(也就是如果你把一大碗水倒到小杯时一定会溢出的道理一样)。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
看了你们的结论花了个图 现在懂了 真心感谢 原来是我太纠结与()小括号了{:soso_e127:} 根据你们说的 想起来前面的知识了 ,真心感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马