java里怎么在有继承的情况下判断出由父类生成的类

superhyk1992 2012-07-20 02:10:28
简单的举个例子
class A
{
}
class B extends A
{
}


B b = new B() ;
A a = new A() ;

现在希望判断出哪些实例是由new A()生成的(就是纯的父类)
如果用instanceof就有问题 new B()生成的也会被认为是A的实例
a.getClass()==A.class这样会报错有人能解释一下为什么呢?还有要则呢么改正呢
难道一定要new A()产生一个无用的A类来getclass判断吗?
...全文
340 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongheguoyingpai11 2012-07-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

Java code

a.getClass().getName().equals(A.class.getName())
[/Quote]
学习了
linguangliang 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
Java code


a.getClass().getName().equals(A.class.getName())
[/Quote]

不行就用这个
yqy521 2012-07-20
  • 打赏
  • 举报
回复
instanceOf
lip009 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 1 楼 的回复:

没啥问题啊,是你语法错误么?

HashSet<String> set = new HashSet<String>();
System.out.println(set.getClass() == HashSet.class);

显示是:true


B a=new B();
System.out.println(a.getClass() == ……
[/Quote]

这样写确实编译不过的,只能比较a.getClass().getName()
superhyk1992 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

没啥问题啊,是你语法错误么?

HashSet<String> set = new HashSet<String>();
System.out.println(set.getClass() == HashSet.class);

显示是:true
[/Quote]

B a=new B();
System.out.println(a.getClass() == A.class);
这么写提示操作数类型 Class<capture#1-of ? extends B> 和 Class<A> 不兼容
为什么会这样呢
SmileToCandy 2012-07-20
  • 打赏
  • 举报
回复
楼上解决的没错.
xdrs_long 2012-07-20
  • 打赏
  • 举报
回复
跟楼上的一样,只管方便用,没去想过程。
jason_deng 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
继承就是用来实现多态的,只要能产生想要的结果,为什么还要判断到底是哪个类创建的实例呢,真想看的话,把类实例的类名打印出来看看呗
[/Quote]

+1
di_wq 2012-07-20
  • 打赏
  • 举报
回复
继承就是用来实现多态的,只要能产生想要的结果,为什么还要判断到底是哪个类创建的实例呢,真想看的话,把类实例的类名打印出来看看呗
lip009 2012-07-20
  • 打赏
  • 举报
回复

a.getClass().getName().equals(A.class.getName())
MiceRice 2012-07-20
  • 打赏
  • 举报
回复
没啥问题啊,是你语法错误么?

HashSet<String> set = new HashSet<String>();
System.out.println(set.getClass() == HashSet.class);

显示是:true

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧