有关Object 这个上帝类的继承

没戴面具的小丑 2019-04-01 07:56:11
我们都知道,java中的类若没有继承其他类,则默认继承Object类
然后我自己写了个Object类,里面的构造方法调用了其父类的构造方法,这样是可以通过的
class Object
{
Object()
{
super();
}
}
那么疑问来了,这个Object类是继承了哪个类呢?也是继承了Object类吗?这样不是陷入了循环继承吗?
又做了以上改动
class Object extends Object
{
Object()
{
super();
}
}
这样写果真报错,循环继承。
所以?第一种写法,Object到底继承了哪个类?
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 qq_39936465 的回复:
[quote=引用 4 楼 x18856233122 的回复:]
[quote=引用 2 楼 qq_39936465 的回复:]
[quote=引用 楼主 x18856233122 的回复:]
我们都知道,java中的类若没有继承其他类,则默认继承Object类
然后我自己写了个Object类,里面的构造方法调用了其父类的构造方法,这样是可以通过的
class Object
{
Object()
{
super();
}
}
那么疑问来了,这个Object类是继承了哪个类呢?也是继承了Object类吗?这样不是陷入了循环继承吗?
又做了以上改动
class Object extends Object
{
Object()
{
super();
}
}
这样写果真报错,循环继承。
所以?第一种写法,Object到底继承了哪个类?


第2段 自己是自己的父类肯定报错啊. 第一段继承的还是Object ,虽然你起名和Object一样,但是Object类本体是在java.lang包内,和你的类是2个类[/quote]

那再请问下,最终的 Object 是默认继承谁的呢?[/quote]

默认继承的是 java.lang.Object类[/quote]
好的,非常感谢你能抽出时间来解决我的问题。谢谢
qq_39936465 2019-04-01
  • 打赏
  • 举报
回复
引用 4 楼 x18856233122 的回复:
[quote=引用 2 楼 qq_39936465 的回复:]
[quote=引用 楼主 x18856233122 的回复:]
我们都知道,java中的类若没有继承其他类,则默认继承Object类
然后我自己写了个Object类,里面的构造方法调用了其父类的构造方法,这样是可以通过的
class Object
{
Object()
{
super();
}
}
那么疑问来了,这个Object类是继承了哪个类呢?也是继承了Object类吗?这样不是陷入了循环继承吗?
又做了以上改动
class Object extends Object
{
Object()
{
super();
}
}
这样写果真报错,循环继承。
所以?第一种写法,Object到底继承了哪个类?


第2段 自己是自己的父类肯定报错啊. 第一段继承的还是Object ,虽然你起名和Object一样,但是Object类本体是在java.lang包内,和你的类是2个类[/quote]

那再请问下,最终的 Object 是默认继承谁的呢?[/quote]

默认继承的是 java.lang.Object类
  • 打赏
  • 举报
回复
引用 2 楼 qq_39936465 的回复:
[quote=引用 楼主 x18856233122 的回复:]
我们都知道,java中的类若没有继承其他类,则默认继承Object类
然后我自己写了个Object类,里面的构造方法调用了其父类的构造方法,这样是可以通过的
class Object
{
Object()
{
super();
}
}
那么疑问来了,这个Object类是继承了哪个类呢?也是继承了Object类吗?这样不是陷入了循环继承吗?
又做了以上改动
class Object extends Object
{
Object()
{
super();
}
}
这样写果真报错,循环继承。
所以?第一种写法,Object到底继承了哪个类?


第2段 自己是自己的父类肯定报错啊. 第一段继承的还是Object ,虽然你起名和Object一样,但是Object类本体是在java.lang包内,和你的类是2个类[/quote]

那再请问下,最终的 Object 是默认继承谁的呢?
qq_39936465 2019-04-01
  • 打赏
  • 举报
回复
引用 1 楼 x18856233122 的回复:
我还有第二个问题
第一段代码我标明了一个空指针异常,但是我在主函数里调用时,标明的是数组下标越界异常。但是代码竟然通过了
class ExceptionDemo
{
public void printInfo() throws NullPointerException
{
System.out.println("abcde");
}
}
class Demo
{
public static void main(String[] args) throws ArrayIndexOutOfBoundsException
{
new ExceptionDemo().printInfo();
}
}
我先以为ArrayIndexOutOfBoundsException是NullPointerException的父类,所以可以编译通过。但是当我把两个异常的位置交换后,还是可以运行。所以,这两个异常应该不是继承关系。那么,为何可以标明不同的异常呢??
我又把第一段的代码ArrayIndexOutOfBoundsException改成了父类Exception,此时编译就报错了。所以,这到底是怎么回事?为何标明的是NullPointerException,调用时却可以标明ArrayIndexOutOfBoundsException,难不成异常也有自动转换?



编译器不会检查RuntimeException异常,所以当你抛出的异常都是RuntimeException,编译不会报错的.

我们比较熟悉的RumtimeException类的子类有

Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.IndexOutOfBoundsException
Java.lang.NullPointerException
qq_39936465 2019-04-01
  • 打赏
  • 举报
回复
引用 楼主 x18856233122 的回复:
我们都知道,java中的类若没有继承其他类,则默认继承Object类
然后我自己写了个Object类,里面的构造方法调用了其父类的构造方法,这样是可以通过的
class Object
{
Object()
{
super();
}
}
那么疑问来了,这个Object类是继承了哪个类呢?也是继承了Object类吗?这样不是陷入了循环继承吗?
又做了以上改动
class Object extends Object
{
Object()
{
super();
}
}
这样写果真报错,循环继承。
所以?第一种写法,Object到底继承了哪个类?


第2段 自己是自己的父类肯定报错啊. 第一段继承的还是Object ,虽然你起名和Object一样,但是Object类本体是在java.lang包内,和你的类是2个类
  • 打赏
  • 举报
回复
我还有第二个问题
第一段代码我标明了一个空指针异常,但是我在主函数里调用时,标明的是数组下标越界异常。但是代码竟然通过了
class ExceptionDemo
{
public void printInfo() throws NullPointerException
{
System.out.println("abcde");
}
}
class Demo
{
public static void main(String[] args) throws ArrayIndexOutOfBoundsException
{
new ExceptionDemo().printInfo();
}
}
我先以为ArrayIndexOutOfBoundsException是NullPointerException的父类,所以可以编译通过。但是当我把两个异常的位置交换后,还是可以运行。所以,这两个异常应该不是继承关系。那么,为何可以标明不同的异常呢??
我又把第一段的代码ArrayIndexOutOfBoundsException改成了父类Exception,此时编译就报错了。所以,这到底是怎么回事?为何标明的是NullPointerException,调用时却可以标明ArrayIndexOutOfBoundsException,难不成异常也有自动转换?

62,628

社区成员

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

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