Java多态的内存机制

简介:
学习java也快一年多了,看过很多方面的书,也喜欢在网络上学习优秀的java资料。但是每当自己打开myeclipse时,总是那么的不自信…………,java基础部分的内容自己以及掌握,并能很好运用,加油吧,多实践,多总结,一定会有所突破的。老银每天进步一点点。
  今天就总结一下,自己看过的资料上好的列子。
  1: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,我感觉自己有点明白了一些,多态就是用子类的调用方法,来将子类中重写的父类方法,让父类调用。即父类对象的框架上,将子类的覆写方法覆盖父类的方法,当然父类类上不存在的方法,对象没有内存空间存放子类方法,编译自然就有问题了。总之,多态就是与覆写方法有关,与成员变量无关。


最新内容请见作者的GitHub页:http://qaseven.github.io/
相关文章
|
11天前
|
Java 数据库连接 开发者
Java的Shutdown Hook机制:优雅地关闭应用程序
Java的Shutdown Hook机制:优雅地关闭应用程序
18 1
|
4天前
|
算法 程序员 调度
深入理解操作系统的内存管理机制
【5月更文挑战第9天】 在现代计算机系统中,操作系统的内存管理是一个至关重要的部分,它直接影响到系统的性能和稳定性。本文将深入探讨操作系统的内存管理机制,包括物理内存的管理、虚拟内存的概念和应用,以及内存分配和回收的策略。通过对这些内容的深入理解,我们可以更好地理解操作系统的工作原理,提高我们的编程效率和质量。
|
13天前
|
算法
深入理解操作系统的内存管理机制
【4月更文挑战第30天】 在现代计算机系统中,操作系统扮演着至关重要的角色,它负责协调和管理硬件资源,确保系统高效、稳定地运行。其中,内存管理是操作系统的核心功能之一,涉及到物理内存的分配、虚拟内存的映射以及内存的优化等多个方面。本文将深入探讨操作系统中的内存管理机制,包括分页、分段和段页式结合等技术,旨在为读者提供一个清晰的内存管理框架视图,并解释这些技术如何提高系统的性能和稳定性。
|
13小时前
|
Java 编译器 ice
【Java开发指南 | 第二十六篇】Java多态
【Java开发指南 | 第二十六篇】Java多态
8 1
|
1天前
|
安全 Java 数据安全/隐私保护
Java一分钟之-Java反射机制:动态操作类与对象
【5月更文挑战第12天】本文介绍了Java反射机制的基本用法,包括获取Class对象、创建对象、访问字段和调用方法。同时,讨论了常见的问题和易错点,如忽略访问权限检查、未捕获异常以及性能损耗,并提供了相应的避免策略。理解反射的工作原理和合理使用有助于提升代码灵活性,但需注意其带来的安全风险和性能影响。
15 4
|
3天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
4天前
|
Java 数据安全/隐私保护
java中异常处理机制
java中异常处理机制
11 1
|
4天前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
16 3
|
4天前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
16 2
|
4天前
|
算法 安全 UED
深入理解操作系统的内存管理机制
【5月更文挑战第9天】 在本文中,我们将探讨操作系统的核心组件之一——内存管理。不同于传统的摘要概述,我们将直接切入主题,首先介绍内存管理的基础知识,然后深入讨论操作系统如何处理内存分配、内存保护以及虚拟内存技术。通过分析具体实例和案例研究,文章旨在为读者提供一个清晰的框架,以理解内存管理在现代操作系统中的实现和重要性。
4 0