请问Java中接口与Object类的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问Java中接口与Object类的问题相关的知识,希望对你有一定的参考价值。

Object类是根基类,接口和Object是什么关系呢?
接口会从Object继承么?
我的疑惑是因为:
class B extends C implements A
public static void main(String[] args)
A a = new B();
a.toString();//没问题
// a.c(); 报错



interface A

class C
public void c()

老师说,new B 的时候会先构造一个父类对象,所以最后这个B对象出来了,B中有一个C,而C中又有一个Object
现在父类引用指向子类对象,接口A类型的引用a 指向了这个B对象,
那么应该是a只能访问自己这个接口的内容啊(如A接口定义的成员变量和方法)
同样的都是B的父类,
为什么能调用父类Object的toString()方法?
为什么调父类C的方法c() 不行?
有道理可讲么?
----
另外小弟深信理解了内存就理解了一切,
各位高手能否推荐一些书或者什么资料呢?我特别想知道Java在运行的时候内存中究竟发生了什么事情,但是很多书都是讲语法,讲道理,很少提及内存,我也不知道我说的内容在java计算机里面属于那方面,是编译原理么?我学Java时间不长,也不知道我的学习目标想学习内存对不对,以后肯定要走J2EE方向的,在这里请各位高手指点,100分全给了!谢谢大家了!
还有一个问题,在泛型中:
class C<T>

<T>相当于这样<T extends Object>
表示的是可以是Object或者是Object的子类,
为什么我可以:
C<List> c = new C<List>();
传一个接口进去?
接口不是Object的子类啊,接口和Object的关系是...
更加迷惑了,如有高手解答,感激不尽.

参考技术A 情况是这样的. 如上代码 A a = new B(); B为A的实现类. 那么a指向为B的实体.
但是,A作为一个接口. java规定 接口的指针只能使用自己的抽象方法,不过所有的类的都属于Object的子类.所以都会有Object的方法.
这很像USB接口, A a = null; A只是针对这个接口编程, 至于如何实现那就是B的事情, 我只想用a的某某方法就可以了.

c()方法a是看不见的. 就像USB口的另一端是什么东西. a是不需要关心的.

(接口是否继承Object? 实现类肯定继承Object,所有 a.toString()就不奇怪了.)
你的想法不错,因为new String("hello"); 有时候没人关心到底产生了几个对象(两个). 可是不知道原理.有时候就很难使程序高效运行.
关心内存的变化好像java程序员很少考虑.因为都被垃圾回收器做了.自己调用"析构函数"(GC)还会使程序出问题.

提供程序的效率是编程永恒的主题. 但是用java编程更关心如何实现程序的逻辑. 垃圾回收功能,让编写代码变得简单了. 强制类编程.让程序结构更加严禁.
最牛的就是坚定的开源思想, 各种思想的汇聚成这个参天大树.

我做java开发的总结是, java程序员是幸福的, 因为我们总是看着别人的代码开发程序. java程序员同时也是悲哀的, 因为我们从来都不知道计算机的精华到底是什么!

如有错误请指正.本回答被提问者采纳
参考技术B 只要是对象,就能调用Object的一切方法,自然包括toString()的方法。

要调用c()这个方法,只能这样做:
B a=new B();或C a= new B();

我也看了很多的JAVA语法书,的确很少去讨论内存,内存的操纵是属于编译原理的内容,你可以去看相关的书籍。

但我可以简单给你这样说说:
堆是用来动态生成内存,也就是new出来的东西是存放在堆中,栈是用来存放局部变量,data segment是用来存放静态变量和字符串常量的。

请问各路java高手,conllection到底是容器还是集合,我犯晕

你打开API文档,在索引那里打上Collection,按确定,双击第一个搜素结果,别告诉我你没有文档。总的来说,接口Collection就是大部分类集类的父类,因为它是接口,所以必须靠子类为其实例化,但是大部分继承此接口的类拥有的方法要比它多得多,所有一般不会为它进行实例化的操作而直接使用它的子类 参考技术A Thinking in java 这本书中提到过这个问题 所有持有对象的东西 例如:Collection接口 和Map接口 本应该统称集合类 但是Collection接口占了"集合"的这个名字 ,所以就都称为容器类 参考技术B java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。它是各种集合结构的父接口。

而java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化就像一个工具类。
参考技术C Collection 是 集合的顶层接口 Collections是封装了操作集合的工具方法追问

那容器又是什么

追答

Map,Collection下面的List Set吧

参考技术D 先做个Mark,明天给你说追问

好,我等你

追答

都答应给你说了,虽然你已经采纳过了
Java容器类包含List、ArrayList、Vector及map、HashTable、HashMap
集合类Collection存放于java.util包中。
所以Collection既是集合类又是容器类

以上是关于请问Java中接口与Object类的问题的主要内容,如果未能解决你的问题,请参考以下文章

Java Map接口中put方法的问题?

Java自学-继承与接口 Object类

Object类

Object类

JAVA异常处理原理浅析

Java开发基础知识之学习篇——Object类