父类和子类的实例问题

我为JAVA狂 2012-06-20 08:15:17
如果一个父类只扩展了一个子类,比如Circle extends Shape,就是说只用了Circle来继承Shape,没有用其他。我知道凡是Circle的实例都是Shape的实例,那在这里的话Shape的实例一定是Circle的实例吗?如果不是,为什么?
...全文
194 10 打赏 收藏 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
桔子酸了 2012-06-20
  • 打赏
  • 举报
回复
楼主的说法好像出发点就有问题。
父类的实例就是父类的实例 子类的实例也就是子类自己的实例

只不过 父类对象可以指向子类实例的引用 反之不行。

xlhb 2012-06-20
  • 打赏
  • 举报
回复
不一定,父类可以自己有自己的实例,比如Shape shape = new Shape();
就算Shape 是抽象类,那也可以通过匿名的内部类来构造Shape 的实例
例如 Shape shape = new Shape(){
里面有Shape没有实现的方法
}
悠忧虫 2012-06-20
  • 打赏
  • 举报
回复

class Animal {

public boolean isAnimal() {
System.out.println("animal");
return true;
}

public boolean isTiger() {
System.out.println("not tiger");
return false;
}

}

class Tiger extends Animal {

@Override
public boolean isTiger() {
System.out.println("tiger");
return true;
}

}

public class Main {
public static void main(String[] args) {
Animal animal1 = new Animal();
Animal animal2 = new Tiger();
System.out.println("animal1 instanceof Animal?");
animal1.isAnimal();
System.out.println("\nanimal1 instanceof Tiger");
animal1.isTiger();
System.out.println("\nanimal2 instanceof Animal?");
animal2.isAnimal();
System.out.println("\nanimal2 instanceof Tiger?");
animal2.isTiger();

}
}
金兄 2012-06-20
  • 打赏
  • 举报
回复
说实话,我还连问题都没明白
qybao 2012-06-20
  • 打赏
  • 举报
回复
1L已经说了,可以有匿名类

动物 a = new 人("张三"); //这样是创建唯一继承的子类人的对象

动物 b = new 动物() { //这样是创建匿名的子类对象
{System.out.println("怪兽");}
};


那么除了有唯一继承的子类人对象,还有匿名对象
我为JAVA狂 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不一定,父类可以自己有自己的实例,比如Shape shape = new Shape();
就算Shape 是抽象类,那也可以通过匿名的内部类来构造Shape 的实例
例如 Shape shape = new Shape(){
里面有Shape没有实现的方法
}
[/Quote]

好的,先谢谢。假如拿三楼的例子来说,父类是动物,而唯一继承的子类是人,那么父类自己的实例对象是什么?能举个例子吗?谢谢
我为JAVA狂 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

举个例子,人是动物的子类,张三是人的一个对象,那么张三也是动物的一个对象,而老虎是动物的对象,但老虎并不是人的对象
[/Quote]

我还是有个问题不明白,就是如果人是动物的子类,那么如果我对动物这个父类只扩展一个子类(人),那么会如何?就仅仅是拿这两个类来说,动物的实例对象一定是人的实例对象吗?
qybao 2012-06-20
  • 打赏
  • 举报
回复
举个例子,人是动物的子类,张三是人的一个对象,那么张三也是动物的一个对象,而老虎是动物的对象,但老虎并不是人的对象
qybao 2012-06-20
  • 打赏
  • 举报
回复
不一定
子类对象一定是父类的对象,但是父类的对象不一定是子类的对象,所以向上转换不会出错,向下转换有可能出错

淡定的峰哥 2012-06-20
  • 打赏
  • 举报
回复
不一定,父类可以自己有自己的实例,比如Shape shape = new Shape();
就算Shape 是抽象类,那也可以通过匿名的内部类来构造Shape 的实例
例如 Shape shape = new Shape(){
里面有Shape没有实现的方法
}

62,620

社区成员

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

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