zoukankan      html  css  js  c++  java
  • java多态性理解

    一  多态的基础是继承,重写,父类的引用指向子类对象,接口是多态最常见的实现方式。

    概念性的东西,先说这么多,以上的都是重点,  继承 ,重写 ,父类的引用指向子类对象。

    下面贴上代码  ,一步步来看到底什么是多态。

    父类  动物类,然后会有Dog和Cat类继承此类

    public class DongWu {	
    	
    		public void eat(){
    			System.out.println("动物会吃东西");
    		}
    		
    		public void age(){
    			System.out.println("动物的年龄");
    		}
    
    }
    

     Dog类

    public class Dog extends DongWu {
    	//重写父类的eat()方法
    	public void eat(){
    		System.out.println("狗吃骨头");
    	}
    	//重写父类的age()方法
    	public void age(){
    		System.out.println("10岁的狗狗");
    	}
    }
    

      Cat类

    public class Cat extends DongWu {
    	//重写父类的eat()方法
    	public void eat(){
    		System.out.println("猫吃鱼");
    	}
    	//重写父类的age()方法
    	public void age(){
    		System.out.println("5岁的猫咪");
    	}
    }
    

     如果平时,我们调用cat和dog累中的两个方法,需要这样写。

     为每一个类指定一个对应的方法,这样的工作太繁琐了,我们可以改变一下写法

    public class Test {
    		public static void main(String[] args) {
    			//new出两个类的实例对象
    			Cat c=new Cat();
    			Dog d=new Dog();
    			//new出本类对象test 没有使用static
    			Test test=new Test();
    			test.test(c);
    			test.test(d);
    		}
    		public  void test(Dog d){
    			d.age();
    			d.eat();			
    		}
    		public  void test(Cat c){
    			c.age();
    			c.eat();			
    		}
    		
    }
    

      将 原来的  test方法中的参数类型改成了父类的类型,最后的结果是一样的。

      编译类型是DongWu,运行时的实际类型变成了  具体的类型 比如例子中的 d,d,dw

      这样就不用为每一个类型写一个方法,只需要写一个方法,灵活方便,程序运行时根据传入的具体参数类型去执行相对应的方法

      对于  

    DongWu dw=new Cat();这种方式new出的实例对象,只能调用父类中定义过的方法,子类中新增加的方法是无法调用的。
    public class Test {
    		public static void main(String[] args) {
    			//new出两个类的实例对象
    			Cat c=new Cat();
    			Dog d=new Dog();
    			//父类也就是DongWu的 引用 指向了子类的实例对象 (new Cat())
    			DongWu dw=new Cat();
    			//new出本类对象test 没有使用static
    			Test test=new Test();
    			test.test(c);
    			test.test(d);
    			test.test(dw);
    		}
    		//将参数类型定义为父类的类型
    		public  void test(DongWu dw){
    			dw.age();
    			dw.eat();			
    		}
    		
    

      

  • 相关阅读:
    将当前日期转换成年-月- 日格式
    js修改title
    Window.open()方法参数详解总结(转)
    js(jQuery)获取时间的方法及常用时间类
    用express搭建一个简单的博客系统
    字符串、数组相互转换 对象转换为数组的方法
    多文件上传 input 的multiple 属性
    关于iframe的使用 以及自适应页面高度
    浏览器转换为兼容模式
    分类算法之随机森林
  • 原文地址:https://www.cnblogs.com/sanduweiliangxtx/p/6000531.html
Copyright © 2011-2022 走看看