java多态的内存机制_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java多态的内存机制

java多态的内存机制

 2014/6/25 21:55:48  yinxingpan  程序员俱乐部  我要评论(0)
  • 摘要:学习java也快一年多了,看过很多方面的书,也喜欢在网络上学习优秀的java资料。但是每当自己打开myeclipse时,总是那么的不自信…………,java基础部分的内容自己以及掌握,并能很好运用,加油吧,多实践,多总结,一定会有所突破的。老银每天进步一点点。今天就总结一下,自己看过的资料上好的列子。1:java面向对象特征:抽象,封装,继承,多态。抽象:封装:继承:多态:写一个类,来完成以上所包含的抽象,封装
  • 标签:Java 内存


学习java也快一年多了,看过很多方面的书,也喜欢在网络上学习优秀的java资料。但是每当自己打开myeclipse时,总是那么的不自信…………,java基础部分的内容自己以及掌握,并能很好运用,加油吧,多实践,多总结,一定会有所突破的。老银每天进步一点点。
今天就总结一下,自己看过的资料上好的列子。
1:java面向对象特征:抽象,封装,继承,多态。
抽象:
封装:
继承:
多态:
写一个类,来完成以上所包含的抽象,封装,继承内容

class="java">class LaoYin extends Thread implements Runnable{
    private int  Number=1111111;
    private String name ="loayin";
   
@Override
  public void run() {
  System.out.println("java学习者"); 
}
}

?
java中通过重载,和重写机制来实现多态。



/**
*
* @author YXP 小技巧:当我们想让类中的私有变量让外界访问到:使用SET();GET().
* 简单方法是选中这些变量,右键,source? 然后Ganerate Gater and Seter,即可。
*
*/

public class DuoTai {
     String  name;
     int   age;
    public String getName() {
return name;
}
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();
DuoTai ni=new Dog();
ni.cry();


} 
}
class Cat extends DuoTai{

public void cry(){
System.out.println("喵喵 ");
}
}
class Dog extends DuoTai{
public void cry(){
System.out.println("汪汪叫");

}

}

?
答案肯定是我们要的答案,父类调用子类的方法来为自己声明对象。

但是如果我们改变一下,关于类的成员变量,这里有很大的乐趣………………
为每一个类声明一个一样的成员变量 count
基类100,cat是5,dog是50;
通过多态给基类声明对象,然后通过对象进行调用变量。我们瞧瞧看。

/**
* 
* @author YXP 小技巧:当我们想让类中的私有变量让外界访问到:使用SET();GET().
* 简单方法是选中这些变量,右键,source  然后Ganerate Gater and Seter,即可。
*
*/
public class DuoTai {
     String  name;
     int   age;
     int count=100;
    public String getName() {
return name;
}
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,我感觉自己有点明白了一些,多态就是用子类的调用方法,来将子类中重写的父类方法,让父类调用。即父类对象的框架上,将子类的覆写方法覆盖父类的方法,当然父类类上不存在的方法,对象没有内存空间存放子类方法,编译自然就有问题了。总之,多态就是与覆写方法有关,与成员变量无关。

?

上一篇: Java的WeakReference与WeakHashMap 下一篇: 没有下一篇了!
发表评论
用户名: 匿名