黑马程序员技术交流社区

标题: java基础中关于多态的一个疑问 [打印本页]

作者: Mr.Wu    时间: 2016-5-14 09:20
标题: java基础中关于多态的一个疑问

最近学到java多态处遇到了一个疑问,首先申明一个前提:
java中的引用就相当于C语言中的指针,即引用存放的就是地址。
例如下面的代码
class A
{
public void f()
{
  System.out.printf("AAAA\n");
}
}
class B extends A
{
public void f()
{
  System.out.printf("BBBB\n");
}
}
public class TestPoly
{
public static void main(String[] args)
{
  A aa = new A();
  B bb = new B();
  
  aa.f();
  bb.f();
  
  aa = bb;  // 把bb当做aa来看待  因为子类可以当做父类看待,所以本语句OK
  //bb = aa; // 把aa当做bb来看待, 因为父类不能当做子类看待,所以本语句error
}
}
java栈中的aa变量(引用)的内容即是java堆中 aa对象的首地址。
疑问的描述如下:
假如java中的引用就相当于C语言中的指针,即引用存放的就是地址的话, 那么aa = bb和 bb = aa都可以说的通了,就都是在栈中相互赋值了。
理论上是讲的通的。但是为啥Java 中bb = aa就会报错。
有大神能知道其中的区别吗?因为我有c的基础,看到这不免有所疑问。



作者: Mr.Wu    时间: 2016-5-14 12:12
为什么没人回复呢?
作者: sxj    时间: 2016-5-14 15:40
多态的三个前提
1,继承或实现
2,要有重写
3,父类引用指向子类对象
记住向下转型(Person  p = new Suoer(); system.out.println(p.name))
记住向下转型(Super  s = (Super)p)
作者: 再见卡卡罗特    时间: 2016-5-14 16:14
看一看。。。。。。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2