A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mr.Wu 中级黑马   /  2016-5-14 09:20  /  505 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


最近学到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的基础,看到这不免有所疑问。


3 个回复

倒序浏览
为什么没人回复呢?
回复 使用道具 举报
多态的三个前提
1,继承或实现
2,要有重写
3,父类引用指向子类对象
记住向下转型(Person  p = new Suoer(); system.out.println(p.name))
记住向下转型(Super  s = (Super)p)
回复 使用道具 举报
看一看。。。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马