精华内容
下载资源
问答
  •  * 多态:父类引用指向子类对象.  2. 里氏替换原则:能使用父类地方,一定可以使用子类.  3. 在编译时候,会把父类属性,生成父类属性列表,父类属性有了,这种情况叫编译时绑定;  * 在

     1. 面向对象三大核心思想:
     *      封装: 封装,PPP是封装一部分,权限的封装,数据的封装,逻辑的封装.
     *      继承: 代码重用.
     *      多态:父类的引用指向的子类的对象.

       2. 里氏替换原则:能使用父类的地方,一定可以使用子类.


       3. 在编译的时候,会把父类的属性,生成父类属性列表,父类的属性有了,这种情况叫编译时绑定;
     *    在运行的时候,把子类生成一个对象,也有自己的属性列表,子类的属性就有了,叫运行时绑定.
     
       4. 在程序运行的时候,通过父类属性去调用子类对象的属性,特指成员方法.
     *
     *          程序开发完成---->编译成类文件------->运行
     *
       5.  super():官方说法是代表了父类型的特征,这里就是指父类里面的属性值列表.
     *          具体怎么调用的呢?
     *              在运行的时候
     *              1. 先遍历父类的属性列表;
     *              2. 再遍历子类的属性列表;
     *              3. 如果子类有相同,就调用子类的,没有就是用父类的;
     *              4. 如果父类中没有所指的属性,直接就报错,子类中根本不去,并且这个错,编译的时候就报错了,编译的时候,子类对象还没有,只能遍历父类的属性列表.

     下面是个具体的小例子:

    复制代码
    public class Poly{
        public static void main(String[] args){
            Animal a1 = new Animal(); 
            a1.eat();  
    
            Animal a2 = new Cat();  //多态,创建子类对象
            a2.cry(); 
            a2.eat();
            //a2.move();  //父类中没有所指的属性,直接就报错,子类中根本不去,并且这个错,编译的时候就报错了,编译的时候,子类对象还没有,只能遍历父类的属性列表
        }
    }
    
    
    class Animal {
        public void eat(){
            System.out.println( "动物吃东西" );
        }
    
        public void cry(){
            System.out.println( "动物会叫" );
        }
    }
    class Cat extends Animal {
        public void eat(){
            super.eat(); //父类里面的属性列表
            System.out.println( "猫吃鱼" );
        }
    
        public void move(){
            System.out.println( "猫走猫步" );
        }
    }
    
    class Dog extends Animal {
        public void eat(){
            System.out.println( "狗啃骨头" );
        }
    }
    复制代码

    以下是它的内存图:

    纯属个人总结,希望园友们和前辈们可以多提提意见,以便让知识更加完整、充实, Thanks!
    展开全文
  • java基础之【继承--->多态内存图

    千次阅读 2014-08-12 22:55:20
    1:Animal a = new Cat(); 1.1:在栈中创建区域,类型为Animal,变量名:... 1.3.2:引用着在方法区中初始化[Animal中所有方法,该引用为:[0x754]]。 1.3.3:将Animal()引用赋给spuer();spuer引用着Animal(); 1.4:在

    执行流程

    <span style="font-size:14px;">1:Animal a = new Cat();
    	1.1:在栈中创建区域,类型为Animal,变量名:a;
    	1.2:在堆中new Cat();占用一块区域。地址值:[0x3a4]
    	1.3:spuer()实例化父类Animal。
    		1.3.1:new Animal();占用一块区域,地址值:0x3ab;
    		1.3.2:引用着在方法区中初始化[Animal中的所有方法,该引用为:[0x754]]。
    		1.3.3:将Animal()引用赋给spuer();spuer引用着Animal();
    	1.4:在方法区中初始化Cat类的所有方法,引用值为0x343。
    	1.5:将0x3a4赋给栈中的变量a;a就开始引用Cat()。
    2:a.eat();
    	2.1:通过[0x3a4]找到Cat。
    	2.2:编译时期:先spuer()找到Animal中的方法。如果没有,则报错。
    	2.3:运行时:直接在Cat中找到eat(),当Cat中没有,再去Animal中找。
    	2.4:将eat()方法要方法区压栈,执行,输出:SOP(猫吃鱼);
    3:a = new Dog();
    	3.1:在堆new Dog(),开辟一块新区域,地址值:0x87xfds
    	3.2:spuer();实例化父类Animal  
    		3.2.1:new Animal()开辟新区域,地址值0x33fa;
    		3.2.2:成员方法引用着方法区中已初始化的[0x754];
    		3.2.3:将Animal地址值0x33fa赋给spuer();;spuer引用着Animal();
    	3.3:在方法区中初始化Dog类的所有方法,引用值为0x422ac。
    	3.4:将[0x87xfds]赋给栈中的变量a;  a不再引用Cat,而是引用着Dog;这时堆中的Cat已成为垃圾,等待JVM空闲时来回收。
    4:a.eat();
    	4.1:通过a变量引用值找到堆中标记为0x87xfds的区域。
    	4.2:编译时:先进super();去检查Animal引用的方法区中有没有eat()方法,如有没有则报错。
    	4.3:运行时:直接去Doa方法区中找到eat();如果Doa没有,再去执行super()调用父类的eat()方法。
    	4.4:从方法区中将eat()压栈,执行(SOP('狗吃粮'))。
    5:a.shudy();
    	5.1:通过a变量引用值找到堆中标记为0x87xfds的区域。
    	5.2:编译时:先进super();去检查Animal引用的方法区中有没有shudy()方法,结果Animal中没有shudy()方法,所以就在编译时期就报错。
    6:Dog d = (Dog)a;
    	6.1:在栈中开辟区域,存储类型为Dog,变量名d
    	6.2:将a向下转型,从Animal转为Dog来引用Dog;(将a变量赋给d)
    	6.3:a和d都指向堆中同一个Dog对象。
    7:d.eat();//从Dog方法中压栈执行eat()方法,然后弹栈;
    8:d.shudy();//从Dog方法中压栈执行shudy()方法,然后弹栈;
    9:Cat c = (Cat) a;
    	9.1:在栈中开辟一块区域,存储类型:Cat,变量名称:c
    	9.2:将a向下转型,将Anmail引用Dao转为Cat引用Dog;结果抛出类型转换异常。Dog不能被转为Cat;</span>



    总结:
       1:多态=继承+重写+父类引用子类         如: Fu ff = new Zi();
       2:普通成员
                变量:都参考左边,因为变量不存在重写,方法中调用变量采用就近原则。
        方法:编译参考左边,运行参考右边。
       3:静态成员
              变量和方法:编译运行都参考左边;  因为静态与对象无关。成员加静态修饰的没加private,都可以被类直接调用,所以参考的都是左边。

         
    展开全文
  • 第九章 第11节 面向对象(多态的实现内存图)

    第九章 第11节 面向对象(多态的实现内存图)

    展开全文
  • 内存使用2: ———————————————— /* ClassCastException:类型转换异常 一般在多态的向下转型中容易出现 */ class Animal { public void eat(){} } class Dog extends Animal { public ...


    内存使用图1:



    内存使用图2:





    ————————————————

    /*

    ClassCastException:类型转换异常
    一般在多态的向下转型中容易出现
    */
    class Animal {
    public void eat(){}
    }


    class Dog extends Animal {
    public void eat() {}

    public void lookDoor() {

    }
    }


    class Cat extends Animal {
    public void eat() {

    }

    public void playGame() {

    }
    }


    class DuoTaiDemo5 {
    public static void main(String[] args) {
    //内存中的是狗
    Animal a = new Dog();
    Dog d = (Dog)a;

    //内存中是猫
    a = new Cat();
    Cat c = (Cat)a;

    //内存中是猫
    Dog dd = (Dog)a; //ClassCastException
    }
    }
    展开全文
  • 1.多态的内存分析:上中My是Http的子类;Http是Objedt的子类;当生成一个My对象调用他的service()的时,而他自己没有重写这个方法所以就调用Http的service(他中调用了doGet()问这个doGet();是谁的doGet()...
  • java语言------------多态内存图分析

    千次阅读 2018-04-14 18:22:19
    1.1为什么使用多态,此为没有使用多态的情况 1.2.使用多态的情况是这样 2.1.多态例子练习多态情况下父类的引用不能指向子类特有的成员变量(或成员函数)强制类型转换后可以指向子类对象这时候就需要强制类型转换 ...
  • 记一次java使用多态的对象内存分析 记一次java使用多态的对象内存分析 最近使用aop参数列表替换参数,涉及了使用多态,好久没复习基础,乍一看没看明白,记录下来 基类 子类 方法: 打印结果 知识要点: Java中...
  • Java从入门到放弃09—多态/向上转型/向下转型/多态内存图/抽象类/关键字abstract不能和哪些关键字共存/接口/类与类,类与接口,接口与接口关系/抽象类与接口区别 01 多态 多态是某个事物,在某个时刻所表现...
  • 在继承和多态的内存分配机制:  继承、封装和多态是面向对象的三大支柱要素,也是C#语言中最为重要的概念。在这里无意具体讲解他们的意义、使用方法等,只是想通过具体实例,从它们的内存分配,以期理解其...
  • 88_初识Java_多态内存分析_学习1、简单测试代码如图2、简单画个内存图分析学习 转型:向上转型(子->父) 转型:向下转型(父->子) 要访问谁属性,就转型为谁 1、简单测试代码如图 2、简单画个内存图分析...
  • 多态,抽象类,接口

    2019-06-24 20:44:33
    文章目录多态多态概述多态的前提多态成员访问特点多态的好处多态的弊端以及解决办法多态的内存图抽象类抽象类特点抽象类的成员特点接口接口的成员特点类与接口两两关系接口与抽象类的区别 多态 多态概述 多态概述: ...
  • 1.什么多态?...虚函数表是通过一块连续内存来储存虚函数地址。这张表解决了继承、虚函数(重写)问题。在有虚函数对象实例中都存在一个指向虚函数表指针,虚函数表就像一张地图,指明实际应该调用...
  • 在继承和多态的内存分配机制: 继承、封装和多态是面向对象的三大支柱要素,也是C#语言中最为重要的概念。在这里无意具体讲解他们的意义、使用方法等,只是想通过具体实例,从它们的内存分配,以期理解其运行机制...
  • Java中的多态

    2019-04-17 20:52:23
    多态的定义: 在程序执行期间判断所引用对象的实际类型,...那么我们用一个实际的例子,以及内存图来分析一下。 加入我们先定义一个基类(也可以说是父类)Animal public class Animal { private String n...
  • 多态内存结构图多态的向上转型和向下转型定义多态的弊端: 不能使用子类的特有功能。 我就想使用子类的特有功能?行不行? 行。 怎么用呢? A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而
  • JAVA SE之多态

    2021-04-24 21:15:06
    多态1 多态(动态绑定机制)1.1 多态的概述1.2 多态的成员访问特点1.3 多态的好处和弊端1.4 向上转型和向下转型1.5 多态内存图2 抽象类2.1 抽象类的概述2.2 抽象类的成员特点2.3 抽象类的案例3 接口3.1 接口的概述3.2 ...
  • java多态

    2019-05-09 21:51:28
    1、多态 多态是同一个行为具有多个不同表现形式或形态能力。 多态就是同一个接口,使用不同实例而执行不同操作 ...类从被载到虚拟机内存,到卸载出内存为止,整个生命周期如上。那有些...
  • 一帧需要1024字节,但是单片机B只有512字节内存,其中只有256字节可以分配为显存。解决这个问题方法是在B程序中把显示屏分成4个区域,保存所有要绘制图形信息,每次在256字节中绘制1/4屏,分批绘制、发送。 ...
  • 本文参考总结了某马... (1)成员变量:编译看左边,运行看左边 (2)成员方法:编译看左边,运行看右边 (动态绑定) (3)静态方法:编译看左边,运行看左边下面我们通过内存示意来分别解析多态的三条总结...
  • 以下通过反汇编探索虚函数内存模型,查看虚函数实现多态的过程。 工具 Visual studio 2017:以下程序仅做VC++编译器下的32位程序探讨,其他编译器与64位程序所产生的差异不作讨论。 反汇编过程 首先声明一个不包含虚...
  • 多态内存图 抽象类 抽象类概述 抽象类成员特点 抽象类案例 接口 接口概述 接口成员特点 类与类,类与接口,接口与接口关系 抽象类与接口区别 接口案例 多态 多态:某一个事物,...
  • Java的对象是在堆空间中分配...在内存上 子类的内存分配如下 可以看作  子类的内存空间=父类的内存空间 +子类自己独特的内存空间   然后来看一下this关键字和super关键字 this 关键字依靠对象而存在,...
  • 时候 不是很明白流机制,因为有内存流 文件流 图片流 等等 他们之间相互转化 靠就是流多态性。。。。 unit Unit11; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, ...
  • 多态内存图 抽象类 抽象类的概述 抽象类的成员特点 抽象类的案例 接口 接口的概述 接口的成员特点 类与类,类与接口,接口与接口的关系 抽象类与接口的区别 接口的案例 09.01_面向对象(多态的概述及其代码...
  • 画图板改进和多态

    2015-12-11 12:50:18
    今天,我学到了画图板的重绘和加强了对多态的理解。 原本的画图板就想上一次博客那样,只是用了鼠标监听器来对画图面板作画。一旦界面出现了变动,作图面板的数据就重置了。这里涉及了硬盘、内存以及缓存的知识,...
  • 虚函数表(虚表)是通过一块连续内存来存储虚函数地址,这张表解决了继承,虚函数(重写)问题。在有虚函数对象实例中都存在一张虚函数表,虚函数表就像一张地图,指名了实际应该调用虚函数地址
  • JAVA学习.多态的概念

    千次阅读 2013-12-06 16:29:19
    内存图: 示例代码: package ljy.ploymorphisim; public class Animal { void sound(){ System.out.println("i am an animal , i am sounding~"); } } package ljy.ploymorphisim; public class Cat ...
  • (1)刚开始c是Cat类型引用,生成了一个Cat类型变量,d是Dog类型引用,生成了一个Dog类型变量,所以内存图中指向是整个边框外侧,但是当Girl类型l1时候,Pet类型引用指向了Cat类型变量,因为Pet...
  • 多态内存图 抽象类 抽象类的概述 抽象类的成员特点 抽象类的案例 接口 接口的概述 接口的成员特点 类与类,类与接口,接口与接口的关系 抽象类与接口的区别 接口的案例 09.01_面向对象(多态的概述及其代码...
  • 多态内存图 抽象类 抽象类的概述 抽象类的成员特点 抽象类的案例 接口 接口的概述 接口的成员特点 类与类,类与接口,接口与接口的关系 抽象类与接口的区别 接口的案例 1.多态的概述及其代码体现 A:多态概述...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 384
精华内容 153
关键字:

多态的内存图