2 q8232356 q8232356 于 2016.09.17 12:01 提问

求助各位java的朋友们,小弟初来乍到,这行代码是什么意思呢?

localObject1 = ((ao)localObject2).a();


后面这个.a()应该是方法吧 ,前面这个 (localObject2)对象,加了(ao)是什么意思?
就是这一段((ao)localObject2)

6个回答

Marksinoberg
Marksinoberg   Ds   Rxr 2016.09.17 13:43
已采纳

我这里给模拟一下吧。

 public class Temp {

    public static void main(String[] args) {
        Object localObject2 = new Object();
        ao localObject1 = null;

        localObject1 = ((ao) localObject2).a();
        System.out.println(localObject1);
    }

}
class ao {
    private ao a = new ao();
    public ao a(){
        System.out.println("这里是a方法!");
        return this;
    }
}

结果为:

 Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to dynamic.ao
    at dynamic.Temp.main(Temp.java:19)

虽然满足了语法,但是这并不符合Java的运行原则。


但是这并不代表着思路有问题。这行代码的意思是。先将localObject2强制的转换为ao类型的对象,然后调用其a方法,结果返回一个对象,再赋值给localObject1对象。这也是强制类型转换的一个比较常见的体现。

weixin_36165756
weixin_36165756 回复Marksinoberg: 实话说,是你那样没意义,我这样就是正常的父类下转型,为了调子类方法。
接近 2 年之前 回复
Marksinoberg
Marksinoberg 回复weixin_36165756: 那样还有什么意义,:(
接近 2 年之前 回复
weixin_36165756
weixin_36165756 回复Marksinoberg: 你这是特意举个出错的例子,你这个子类引用指向父类Object对象,运行肯定出错,那你前面的new Object()换成new子类ao,这种转型就没问题了。
接近 2 年之前 回复
xubo_ob
xubo_ob   2016.09.17 12:28

强制转换啊亲,将 localObject2强制转换为对象ao。 你百度下 java强制转换就明白啦

qq_29594393
qq_29594393   Ds   Rxr 2016.09.17 12:39

由于等号两边的类型不一样,不能复制,通过强制转换为相同的类型再赋值

guwei4037
guwei4037   Ds   Rxr 2016.09.17 12:56

强制类型转换。

((ao)localObject2).a();

先把localObject2强制转换为ao对象类型,然后再调用a方法。

yk377657321
yk377657321   2016.09.17 13:34

强制类型转换;将localObject2转换成ao的对象类型,然后调用a方法

moremore123
moremore123   2016.09.17 15:19

强制类型转换;将localObject2转换成ao的对象类型,然后调用a方法

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
linux基本命令(笔记)
linux 一些有用的笔记,各位分多的大虾,小弟初来乍到,请高抬贵手。
bmp文件格式分析分析
HPI是什么意思?_HPI是什么意思?_HPI是什么意思?_HPI是什么意思?_HPI是什么意思?_HPI是什么意思?_HPI是什么意思?_HPI是什么意思?_HPI是什么意思?_
求助各位高手,帮忙做下,谢谢了
由计算机“想”一个四位数,请人猜出这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少时为止。 
xdoj 1003 - 最喜欢的数字
好吧。我觉得我的智商真是不行。。今天一天就在做这个题,题目本身并不难。但是这时间把我卡的还难受了最后还是靠大神的代码看了过了。。。。。仅此献给我的第一篇博客。。。好失败。。第一段是超时的。原因自然是在解决最小的时候的复杂过高有一个值得注意的是。在main外申明的数组默认是初试是全0 。。我也是最近才知道#include #define N 100001 int num[N]; int mark[N
const volatile int i=10;这行代码有没有问题?如果没有,那i 到底是什么属性?【网络总结,版权非我所有】
没有问题,例如只读的状态寄存器 它是volatile,因为它可能被意想不到地改变;它是const,因为程序不应该试图去修改它。 volatile和const并不矛盾,只是控制的范围不一样,一个在程序本身之外,另一个是程序本身。 另外, volatile常用语修饰一些寄存器变量或者端口数据或者多个线程的共享数据。
href="#"是什么意思呢?
原文出处:http://zhidao.baidu.com/question/45932969.html?fr=qrl&index=0&qbl=topic_question_0 联接是当前页面。 ------------------- 通常有如下用法: 关闭 将href="#"是指联接到当前页面,其实是无意义的,页面也不会刷新,关键是后面的onclick,当点击“关闭”时,会执行w
basename是什么意思呢?
今天上线的时候在启动脚本中看见这个命令,不晓得是什么意思,然后手动执行了一下,发现原来也是linux的内置命令。  basename---strip directory and suffix from filenames 大概意思就是去除文件的目录吧,下面我们来测试一下就知道了。 [root@www~]#jarpath=`ls /opt/bgw.smq/lib/www-*.jar` [ro
href=#是什么意思呢?
href=#是什么意思呢?每一个网友都很疑惑,href=#是链接当前页面, 通常有如下用法: 关闭 将href="#"是指联接到当前页面,其实是无意义的,页面也不会刷新,关键是后面的onclick,当点击“关闭”时,会执行window.close()代码。 你或许会说为什么不直接写成关闭 如果这样写,关闭这两个字就不会作为超联接处理,效果看上去会差一些。你可以自己试试。在制作
Animation.setFillAfter 是什么意思呢
动画停止时,停留在最后一帧,否则回到之前状态
文件是什么意思呢?
-