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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wupingtanlu 中级黑马   /  2012-5-12 23:59  /  1468 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

FatherClass  fc=new SonClass();的引用是如何的呢?
SonClass  sc=new FatherClass();能不能这样写呢,应用又是如何的呢?
用到typeof有时候要用来判断原始类型 该如何用呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
FatherClass  fc=new SonClass();  就是一个父类的对象变量,存的是堆栈中new出来的子类对象的地址,因此是父类引用指向子类对象
SonClass  sc=new FatherClass();  这个是不允许的,编译器会直接报错。

使用typeof的时候,不是有通配符的扩展限定吗,
? extends E 只允许某个类E的对象或者其的子类对象做参数,
? super  E 只允许某个类E的对象或者其父类对象作参数。

不知道这样说楼主是否理解了?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
FatherClass  fc=new SonClass();是用父类声明,子类实例化,体现了Java的多态性。fc这时候只能用Father里的方法,不能用Son里的方法,等于类型向上提升,把Son当做Father来用。
SonClass  sc=new FatherClass();不能这样写,因为这有个范围大小的问题,一个Father可能有多个子类,Son可以说是Father的一种,但是Father不可以说是Son的一种,因为也有可能是Daughter(开个玩笑增强理解),所以不能这样用。但是实际上也有一种例外,就是向下转型的问题,当我们现在需要用fc调用Son里的方法时就需要向下转型把他转回Son,SonClass sc = (SonClass) fc;这样做不会出错的原因是已经知道fc其实本身就是SonClass类型的,所以再转回了是没有问题的,但是其他情况下强转有可能会出错,所以不能用。
你说的typeof没有这个关键字,是instanceof,判断一个对象是不是一个类的实例。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 jiyixuan 于 2012-5-13 09:50 编辑

FatherClass  fc=new SonClass(); 是父类引用指向子类对象,属于多态情况。相当于限定子类的方法范围只能是父类的方法。子类自身

SonClass  sc=new FatherClass();是不允许的,不存在应用的情况。

typeof 运算符把类型信息当作字符串返回。具体介绍:typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型。他的返回值是一个字符串,该字符串说明运算数的类型。

typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined."
typeof( )运算数未定义,返回(的)就是 "undefined".
运算数为数字 typeof(x) = "number"
字符串 typeof(x) = "string"
布尔值 typeof(x) = "boolean"
对象,数组和null typeof(x) = "object"
函数 typeof(x) = "function"
typeof 运算符返回一个用来表示表达式(的)数据类型(的)字符串。

具体的规则如下:
一、对于数字类型的操作数而言, typeof 返回的值是 number。
二、对于字符串类型, typeof 返回的值是 string。比如typeof("123")返回的值是string。
三、对于布尔类型, typeof 返回的值是 boolean 。比如typeof(true)返回的值是boolean。
四、对于对象、数组、null 返回的值是 object 。比如typeof(window),typeof(document),typeof(null)返回的值都是object。
五、对于函数类型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。
六、如果运算数是没有定义的(比如说不存在的变量、函数或者undefined),将返回undefined。比如:typeof(sss)、typeof(undefined)都返回undefined。

注意几个基本常量返回值仍为number,包括 :
NaN             特殊的非数字值
Number.MAX_VALUE     可表示的最大数字
Number.MIN_VALUE      可表示的最小数字(与零最接近)
Number.NaN            特殊的非数字值
Number.POSITIVE_INFINITY    表示正无穷大的特殊值
Number.NEGATIVE_INFINITY     表示负无穷大的特殊值


评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 赞一个!

查看全部评分

回复 使用道具 举报
了解了,谢谢给位!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马