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

来源:百度知道 编辑:UC知道 时间:2024/06/10 03:31:46
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 = 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程序员同时也是悲哀的, 因为我们从来都不知道计算机的精华到底是什么!

如有错误请指正.

只要是对象,就能调用Object的一切方法,自然包括toString()的方法。

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

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

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