概念:

动态绑定:在执行期间(非编译期间)判断所引用的对象的实际类型,根据实际类型调用其相应的方法。如下例程序中,根据person对象的成员变量pet所引用的不同的实际类型调用相应的方法。

具体实现好像是在java的底层机制中有一个指针会动态指向相应类。

 class Animal{  //定义Animal基类
private String name; //成员变量
public Animal(String s) { //Aniamal的构造函数
name = s;
}
public void print(Animal a) {
System.out.println("name: "+a.name); //输出动物名字
}
public void voice() {
System.out.println("Animal voice"); //输出动物叫声
}
}
class Cat extends Animal{ //定义Cat类exends(继承)于Animal
public String voice;
public void voice() {
System.out.println("猫叫声:Miao~~~");
}
public Cat(String name1) { //Cat的构造函数
super(name1);//用super()调用父类的构造函数,完成名字输入。
}
}
class Dog extends Animal{ //定义Dog类exends(继承)于Animal
Dog(String name2) //Dog的构造函数
{
super(name2); //用super()调用父类的构造函数。语法要求
}
public void voice() {
System.out.println("狗叫声:Wang~Wang~Wang~");
}
}
class person{ //定义一个独立的person类,实现多态。
private Animal pet; //定义一个动物类的成员变量
public person(Animal animal) { //person的构造函数,养的宠物是什么动物。
pet = animal;
}
public void petvoice(){ //实现多态
pet.voice(); //根据传入的动物类型调用相应的方法。
}
}
public class TestDuoTai {
public static void main(String[] args) {
Cat c2 = new Cat("Kitty"); //new出一个Cat
Dog d2 = new Dog("Snube"); //new出一个Dog
person p = new person(c2);
person p2 = new person(d2);
p2.petvoice();
p.petvoice(); //调用方法,多态。
}
}

编译结果:

小插曲:在用JDK编译的时候发现用的GBK编码,和java默认的Unicode编码不同,导致所有中文都出现乱码。

只好在编译时临时去掉所有中文。具体解决方法,未知。

SummerVocation_Leaning--java动态绑定(多态)的更多相关文章

  1. java 动态绑定 多态

    继承链中对象方法的调用规则:当前类-->父类-->爷类-->..-->祖先类(只能向上找,不能向下找)优先级:this.method(Obj) > super.metho ...

  2. Java JVM 多态(动态绑定)

    Java JVM 多态(动态绑定) @author ixenos 摘要:绑定.动态绑定实现多态.多态的缺陷.纯继承与扩展接口.向下转型与RTTI 绑定 将一个方法的调用和一个方法的主体关联起来,称作( ...

  3. Java 动态绑定和多态

    动态绑定和多态 动态绑定是指:"在执行程序期间(而非编译期间),判断引用所指对象的实际类型,调用其相应的方法." 动态绑定(多态)存在的条件 要有继承. 要有重写. 父类引用指向子 ...

  4. 关于java中多态的理解

    java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...

  5. 个人对Java中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  6. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

  7. java动态绑定的情况分析

    java是面向对象的语言,java中多态的一种情况是动态绑定.所谓的动态绑定,分两种情况:当调用类方法的时候,java虚拟机会基于对象的引用类型来选择执行方法.当java调用一个实例方法的时候,他会根 ...

  8. JAVA & C++ 多态

    多态,也叫动态绑定. Java: class A { public void f1() { System.out.println("A:f1"); } public void f2 ...

  9. java的多态以及重载,重写,前期绑定,后期绑定

    多态的定义: 一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同内部结构的对象可以共享相同的外部接口.这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通 ...

  10. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

随机推荐

  1. Javascript专题(三)c.各种轮播--上下滚动轮播(面向对象版本)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. MD5Utils

    import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import com.yundae ...

  3. 练习六:斐波那契数列(fibonacci)

    题目:斐波那契数列. 程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.……. 在数学上,斐波那契数列 ...

  4. Selenium----Selenium WebDriver /RC工作原理

    1.Selenium RC 工作原理 说明:客户端库文件将命令传递给server.接着server使用selenium-core的javaScript命令传递给浏览器,浏览器会使用自带的javaScr ...

  5. Ubuntu系统下同时打开多个终端窗口的软件

    sudo apt-get install Terminator

  6. POI 读取Excel数据

    private List<LeagueGroup> read() throws IOException{ List<LeagueGroup> leagueGroups=new ...

  7. HTML常用标签参考学习

    1.跑马灯标签 功能<marquee>...</marquee> 普通卷动<marquee behavior=slide>...</marquee> 滑 ...

  8. druid监控sql

    我这里是以运维的角度查看sql, 前面的配置需要开发配合,参考:https://blog.csdn.net/u010391342/article/details/80606482 1.首先在注册中心( ...

  9. java中调用ElasticSearch中文分词ik没有起作用

    问题描述: 项目中已经将'齐鲁壹点'加入到扩展词中,但是使用客户端调用的时候,高亮显示还是按照单个文字分词的: 解决方案: 1.创建Mapping使用的分词使用ik 2.查询使用QueryBuilde ...

  10. Soft skill

    不要害怕让别人看到自己的无知 作为高级程序员的一个好处是,当别人问一些我不懂的问题时,我可以很淡然地告诉他们: 这个东西我也不懂,因为以前没有遇到过,不过我可以看一下,然后再告诉你. 当我还是一个初级 ...