public void setName(String name)

来源:互联网 发布:qq旋风怎么样知乎 编辑:程序博客网 时间:2024/04/26 10:31

  public void setName(String name) {

  this.name = name;

  }

  public int getAge() {

  return age;

  }

  public void setAge(int age) {

  this.age = age;

  }

  public void cry(){

  System.out.println("不知道怎么叫");

  }

  public static void main (String[] args){

  DuoTai an=new Cat();

  an.cry();

  System.out.println(an.count);

  DuoTai ni=new Dog();

  System.out.println(ni.count);

  ni.cry();

  }

  }

  class Cat extends DuoTai{

  int count=5;

  public void cry(){

  System.out.println("喵喵 ");

  }

  }

  class Dog extends DuoTai{

  int count=50;

  public void cry(){

  System.out.println("汪汪叫");

  }

  }

  运行看看:F11

  喵喵

  100

  100

  汪汪叫

  现在我们就可以很好的明白多态的机制了,但是我有点晕了,对于这个用多态实现的对象,它内存中是如何实现的呢

  当然main栈区呢 有na ni

  但堆内存中是什么样的内???

  ni(栈内存)

  int count(自身的成员变量)上下

  cry()子类覆写的cry (如何现实的不造,原理)纠结的感觉

  只能是父类引用子类的构造函数,反过来不行。

  多态引用变量会调用子类的方法,但是堆内存上依然存储的是自己的成员变量,只是方法指向了子类的方法吗??.

  如果是指向子类的方法,那么子类必须要实现实例化,所以不成立

  如果子类中有父类不曾有的方法,看看ni还能不能调用,即可知道。

  答案不用说啦,编译不能通过。

  ok,我感觉自己有点明白了一些,多态就是用子类的调用方法,来将子类中重写的父类方法,让父类调用。即父类对象的框架上,将子类的覆写方法覆盖父类的方法,当然父类类上不存在的方法,对象没有内存空间存放子类方法,编译自然就有问题了。总之,多态就是与覆写方法有关,与成员变量无关。

0 0
原创粉丝点击