• Java学习笔记——多态性Polymorphism


    Java中实现多态的机制

    Java中实现多态的机制靠的是父类或者接口定义的引用变量可以指向子类或者具体的实现类的实例对象,而程序调的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

    具体来说,就是父类A有一个方法function(),子类B,C分别继承A并且重写function(),当创建一个对象A b = new B(); b.function()就调用Bfunciotn,假如你new C(),那调用的就是C重写的function。怎么判断使用那个类的function就是动态绑定,这个现象就是多态。

    范例代码:

    public class Test0718_Polymorphism2 {
    	public static void main(String[] args) {
    		Person person1 = new Person();
    		Person person2 = new Man();
    		Person person3 = new Woman();
    
    		person1.walk();
    		person2.walk();
    		person3.walk();
    
    		((Man) person2).Moneyyy();
    		// ((Woman)person2).Shopping();
    		((Woman) person3).Shopping();
    		person1.nameString = "xm";
    		person1.age = 17;
    		person2.nameString = "男人姓名";
    		person2.age = 18;
    		m1(person1);
    		m1(person2);
    		m1(person3);
    		// Man man = new Man();
    		// Woman woman = (Woman)man;
    	}
    
    	public static void m1(Person person) {
    		String iString = person.getInfo();
    		System.out.println(iString);
    	}
    }
    
    class Person{
    	String nameString;
    	int age;
    	public void walk() {
    		System.out.println("走路。。。");
    	}
    	public static void pName() {
    		System.out.println("姓名。。");
    	}
    	public String getInfo() {
    		// TODO Auto-generated method stub
    		return "Name:"+nameString+"	Age:"+age;
    	}
    }
    class Man extends Person{
    	int money;
    	int age;
    	@Override
    	public void walk() {
    		System.out.println("男人走路。。。");
    	}
    	public static void pName() {
    		System.out.println("男人姓名。。");
    	}
    	public void Moneyyy() {
    		System.out.println("男人赚钱。。。");
    	}
    	@Override
    	public String getInfo() {
    		// TODO Auto-generated method stub
    		return "Name:"+nameString+"	Age:"+age+"	Money:"+money;
    	}
    }
    class Woman extends Person{
    	int hehe;
    	@Override
    	public void walk() {
    		System.out.println("女人走路。。。");
    	}
    	@Override
    	public String getInfo() {
    		// TODO Auto-generated method stub
    		return "Name:"+nameString+"	Age:"+age+"	Hehe:"+hehe;
    	}
    	public void Shopping() {
    		System.out.println("女人购物。。");
    	}
    }

    执行结果:
    ---------- 运行 ----------
    走路。。。
    男人走路。。。
    女人走路。。。
    男人赚钱。。。
    女人购物。。
    Name:xm Age:17
    Name:男人姓名 Age:0 Money:0
    Name:null Age:0 Hehe:0


    输出完成 (耗时 0 秒) - 正常终止
  • 相关阅读:
    【ci框架】ci框架目录结构分析
    php CI框架
    jQuery boxy弹出层插件中文演示及讲解
    Jenkins构建报错(Jenkins is reserved for jobs with matching label expression)解决办法
    redis缓存数据架构实战
    Git免密码pull&push
    Maven搭建Nexus私有仓库
    Windows使用filezilla搭建FTP服务器
    CentOS7.4使用yum安装MySQL5.6
    MySQL数据库连接池导致页面登录无法查询问题解决过程
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211375.html
Copyright © 2020-2023  润新知