zoukankan      html  css  js  c++  java
  • 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 秒) - 正常终止
  • 相关阅读:
    js原型链
    charles重放攻击2
    charles攻击重放测试网页
    js逆向基础知识
    js重放攻击
    js逆向之 中间人攻击-js注入
    修改jadx默认内存
    frida-ida hook操作
    关于ios 9系统完全越狱frida安装不上的的问题
    IDA 静态调试和动态调试
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211375.html
Copyright © 2011-2022 走看看