请问:Java中的抽象类有没有对象?(一道大唐移动面试题)

andevele 2008-03-22 02:54:20
请问:Java中的抽象类有没有对象?(一道大唐移动面试题)

...全文
1354 67 打赏 收藏 转发到动态 举报
写回复
用AI写文章
67 条回复
切换为时间正序
请发表友善的回复…
发表回复
zishizhilong 2008-07-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangtoby 的回复:]
这个面试题有点弱噢 ...
[/Quote]

同感。。。。
hx6917186 2008-07-25
  • 打赏
  • 举报
回复
抽象类和接口都可以声明一个对象,但是只声明了对象的引用
即可以这样
List list = null;(抽象类)
List<String> list = null; (接口)

这两个例子分别演示了抽象类和接口声明对象的过程。但是这只是声明了对象的一个引用,并不能指向任何实例。
具体实例需要其非抽象的子类或者是实现类来声明。如下:

list = new ArrayList();(抽象类)
list = new ArrayList<String>();(接口)

这两句的意思是,创建实例,并且将刚刚创建的引用指向这个新的实例。

也就是说,平常连着写 List list = new ArrayList(); 其实包括几部分内容:
1,创建对象引用,存放于堆栈中。
2,创建对象实例,存放于堆中。
3,将引用指向刚刚创建的实例。

基本是这样的。。。

OnlyLikeJava 2008-07-25
  • 打赏
  • 举报
回复
准确的说应该是有对象的,不过不能被直接实例化而已。
lxxzhy 2008-07-25
  • 打赏
  • 举报
回复
其实可以准确地回答面试官:没有!
因为抽象类是不能实例化的,而对象是类的实例化.
另外,为什么大家都觉得2楼是完美的答案呢?

public abstract class A{}
public class B extends A{}

A a = new B();
这里,A a是在声明一个A类的reference,而非声明A类的一个对象,所以在这种情况下,也是没有类A的对象的.
因此大家不用质疑出题者的水平了.
coolbamboo2008 2008-07-25
  • 打赏
  • 举报
回复
楼上的解答都看过了,在这里好好学习一下了.
finalzhzhk 2008-07-24
  • 打赏
  • 举报
回复
答案是:没有.

另.鄙视一下大唐.哈哈
jishu_vip 2008-07-24
  • 打赏
  • 举报
回复
哈哈!

综合2楼和6楼

抽象类有类对象,而没有实例对象

抽象类可以声明对象,但是不能使用自身的构造方法创建对象,但是可以使用子类的构造方法进行创建。
Beckham19359917 2008-07-24
  • 打赏
  • 举报
回复
抽象类是不能创建对象的,也就是不可以new一个对象,但是它可以创建一个引用,用来指向子类的实例!
abstract class A{
}
class B extends A{
}
A a=new B();
numen_wlm 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tianyidan 的回复:]
那么当你创建一个抽象类时,它本身就是一个对象;
[/Quote]
对你的这一说法,我持怀疑态度,我认为类就是类,对象就是对象,对象是类实例化的结果,如果说一个类本身就是一个对象的话,那么该类由谁实例化而来?
pzy123cn 2008-07-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 henry1451 的回复:]
却确的说是有类对象,而没有实例对象,具体点的,就如2楼所说.
[/Quote]
绝对同意
sunjunpan 2008-07-24
  • 打赏
  • 举报
回复
像考公务员的题.考查语言理解能力..
BatiTan 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhu_apollo 的帖子:]
请问:Java中的抽象类有没有对象?(一道大唐移动面试题)
[/Quote]其实,我感觉出题人的意思是抽象类能不能生成对象
如果这样问,感觉抽象类还是有对象的
这个就和继承关系差不多吧,继承向上转型是正确的
具体类的对象也是该类的对象,也就是有对象喽
~不知道这理解对不.?
Rinoajun 2008-07-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tianyidan 的回复:]
这道题目其实考的是你对java的理解。
2楼的回答可以看做是官方的正解,如果你是在笔试,姑且勉强给你个满分;但如果是面试中这样回答的话,估计很难让人满意。

按照java的编程思想“一切皆对象”,那么当你创建一个抽象类时,它本身就是一个对象;在面向对象的编程中,出现“抽象类”这一东东,本身就是很尴尬的,至于为什么有它,我想深入后,大家都知道了。

[/Quote]
andevele 2008-07-23
  • 打赏
  • 举报
回复
谢谢大家的回答

我觉得有争议的问题提出来让大家讨论才有意思,这个题目问的没有问题,主要看你如何回答?

不能肯定的回答“是” 或者 “否”。

这就是考官要考你的分析能力,看下面的程序

abstract class BaseClass
{
private int a = 5;
public BaseClass()
{

}
public void baseFun()
{
System.out.println("基类方法");
}
}

class DerivedClass extends BaseClass
{
private int b = 6;
public DerivedClass()
{

}
public void derivedFun()
{
System.out.println("子类方法");
}
}
public class TestAbstractClass {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BaseClass base ;//可以声明一个基类对象
base = new DerivedClass();//利用子类构造一个对象,让base指向它,因为是"is-a"关系,
所以子类对象也是父类对象,此时可以认为父类(抽象类有对象)


}

}

总结:

(1)抽象类可以“声明”(注意:并不是创建)一个对象,然后利用子类构造一个对象,抽象类如果有对象,
这个对象也是用它的子类创建的,子类对象也是父类对象(is-a关系),故此时可以认为父类(抽象类)有对象。

(2)抽象类,就是因为是抽象的,表示未完全实现的,因此不能实例化,即:没有实例。虽然抽象类也有

自己的构造方法,但是不能用自己的构造方法来构造一个实例。
ChangXiangzhong 2008-07-02
  • 打赏
  • 举报
回复
题目有问题!
捏造的信仰 2008-07-01
  • 打赏
  • 举报
回复
这题目有歧义。如果把抽象类的子类的对象也看成是抽象类的对象,那就是有;否则就是没有。
joynet007 2008-07-01
  • 打赏
  • 举报
回复
估计这个不在乎结果只 在乎 你理解的过程哦!!
flymaxdragon 2008-06-30
  • 打赏
  • 举报
回复
很显然 ,没有
xiaozhimin1978 2008-06-30
  • 打赏
  • 举报
回复
这种问题无论答“有”还是“没有”,都可以挑出毛病出来

如果是问答题还好办,可以解释,如果是选择题,可就不好答了
sd5816690 2008-06-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Mailbomb 的回复:]
抽象类可以声明对象,但是不能使用自身的构造方法创建对象,但是可以使用子类的构造方法进行创建。
public abstract class A{}
public class B extends A{}

A a = new B();
[/Quote]
加载更多回复(46)

62,623

社区成员

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

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