查漏补缺——java多态

---恢复内容开始---

刚学完java,开始了查漏补缺阶段阶段,为了巩固自己的知识和为别人提供一些微末的帮助决定开通博客,求各位大牛们指出我的不足,不要吝惜言语,也希望我的总结可以对别人有帮助,对自己对他人负责。

开始正文:术语多态:可以定义为“有多种形态”,多态引用是一个一个在不同时刻可以指向不同类型对象的引用变量。通过多态引用可以调用不同的具体的方法。

类方法的多态性的实现有两种方式:

1:方法重载:可以声明多个同名但是参数不同(个数、类型和顺序)的方法。注意呵呵重载方法只能声明在一个类里,当程序编译时会根据参数的不同调用具体的方法。同时有引出了另一个概念——静态绑定。

静态绑定:程序开始编译时对方法的调用进行绑定。(额额)

package animal;
public class Dog {
    //dog的eat方法
    public void eat(int a){
        System.out.println("My dog eat foot num"+a);
    }
    //一个类内重载的dog——eat方法(参数不同)
    public void eat(String str){
        System.out.println("My dog eat foot"+str);
    }

    public static void main(String[] args){
        Dog dog = new Dog();
        dog.eat("chicken");
        dog.eat(3);
    }
}
My dog eat footchicken
My dog eat foot num3

2:方法重写:派生类从基类“继承”的签名一致的方法,(派生类与基类方法的签名相同但是具体方法不同——在不同类中一个方法名具有不同的实现方法)。然后派生类和基类的关系可以有很多种比如继承、接口总之都是is a的关系。同时方法的重写对应的是动态绑定。

动态绑定:程序在运行时确定调用的具体的方法。(有例子)

package animal;

public class Mydog extends Animal{    

    public void eat() {
        System.out.println("这是一条狗吃的");
    }

    public void sleep(){
        System.out.println("狗要睡觉啦。。。。");
    }

    /*程序在运行时确定调用的具体的方法。*/
    public static void main(String[] args) {
        Mydog mydog1 = new Mydog();
        mydog1.eat();//调用派生类方法eat
        mydog1.sleep();//调用派生类方法slepp

        Animal mycat = new Mydog();
        System.out.println("下面是向上转型——动物实现狗的方法(多态)——-————");
        mycat.eat();//向上转型——动物实现狗的方法(多态);
        /*对于向下转型必须显示指定就是必须使用强制转换*/
        Animal mycat2 =  new Mydog();
        Mydog mydog2 = (Mydog)mycat2;
        System.out.println("动物向下转型的实现的狗的sleep方法——————");
        mydog2.eat();//注意是谁吃的,还是狗的方法。
        mydog2.sleep();//动物向下转型的实现的狗的sleep方法
    }
}

因为要上课写了大约一个小时,汗颜...上面的动态绑定又分为向上和向下转型两个方面,向下是强制转化,我认为向上最能体现多态的思想(调用不同类中不同的方法),就写到这吧,敬礼!

---恢复内容结束---

时间: 2025-01-02 14:34:07

查漏补缺——java多态的相关文章

查漏补缺——java枚举(enum)

刚学完java,为了巩固自己的知识和为别人提供一些微末的帮助决定开通博客,求各位大牛们指出我的错误,也希望我的总结可以对别人有帮助. enum的全称是enumeration,是JDK1.5引入的新特性,同时”泛型“也是这一阶段,下一次总结. 1.为什么要创建枚举类型? 答:在编程过程中经常可以遇见数据稳定而且有限的一组数据,比如四季{春,夏,秋,冬}: 而当我们选择一个季节的时候只能四季四个值里选择一个,所以枚举类型是类型安全的,如果使用顶以外的值会编译出错.(例子) package based

java知识查漏补缺

一.重写(override)和重载(overload)的区别 二者除了名字相似,其实没什么联系 范围不同:重写发生在同一个类的不同方法之间.重载发生在父类和子类自荐. 前提: 重写要求:方法名相同,参数列表不同,对于返回值类型不要求相同. 重载要求:方法名形同,参数列表也相同.重载是实现多态的关键,注意如果父类中的方法是private类型,那么子类中对应方法不算重载,而相当于是定义了一个新方法. 二.final的用法 修饰类:该类不能被继承 修饰方法:该方法不能被重写 修饰属性:该属性初始化后不

自家用的java小总结(2.4):类的知识的查漏补缺(内部类)

1 2      首先,这是一篇自己用的文章,不对读者承担任何责任,所以,要带着批判的眼光来看下面的文章   1 发现了,得加上输出结果,怕自己出错,~~   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但

近来的java小总结(2.1):类的知识的查漏补缺

首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一些知

近来的java小总结(2.2):类的知识的查漏补缺

1 首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一

查漏补缺

查漏补缺[1].this语句:this语句用于构造函数之间进行相互调用.this语句只能定义在构造函数的第一行,因为初始化要先执行.[2].对象的初始化过程 Person p =new Person("hei",10); 1.因为new用到了Person.class,所以先找到Person.class文件加载到内存中 2.执行类中的静态代码块,如果有的话,给Person.class类进行初始化 3.在堆内存中开辟空间,分配内存地址 4.在堆内存中建立对象的特有属性,并进行默认初始化 5

查漏补缺1

前言 Java的部分有基础.设计模式.IO.NIO.多线程,之后有时间还会把集合这 部分补上去,这么多内容里面,难免有一些知识点遗漏,本文主要是讲解这些遗漏的知识点.这些知识点,不是特别大的难点,所以没有必要专门写一篇文章讲解: 但是这些知识点,也不是一两句话就说得清楚的,所以放在这里.查漏补缺系列文章,每篇5个知识点,只要有值得研究的问题就会写上来. Thread.sleep(XXX)方法消耗CPU吗? 这个知识点是我之前认识一直有错误的一个知识点,在我以前的认识里面,我一直认为 Thread

20165239其米仁增第一周查漏补缺

第一周查漏补缺 上周我没有在课堂上完成考试内容,原因有以下几点: 第一,课余时间没有好好去敲课本上的java代码,我以后会在课余时间好好完成作业. 第二,因为今年寒假我回老家过年,那里没有网络,没有收到消息,所以在假期自学的时间比较短,在加上我自己母语是藏语,对汉文的理解能力有限,不像其他同学那样,自学起来就比较困难 第三:自己遇到问题时没有积极主动去找同学帮忙,而是自己一个人在那儿瞎弄,导致效率低下: 这周我吸取了上次考试的教训把第一章好好学了一遍,从java的网络,语言,需求等地位道java

第四周查漏补缺

第四周查漏补缺 第三周课下测试总结 课堂测试 考试时,题目要求的"N由命令行传入"我还没学会.于是编辑了以下代码,可以运行.通过键入N值来实现算法: 在课下学习中,还发现这段代码我用了两个类..在这个算法中没有对象,可以不需要用两个类,而且不同类应该单独存一个.java文件. 但我依然没有理解什么时候该分不同类对不同对象实现不同方法... 经过学习和修改后我修改了代码: 然后测试发现:输入5322,返回值sum太大溢出了.于是我把sum的类型改为了long,成功输出了值. 在和小组同学