ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java.多态

2021-09-08 19:33:34  阅读:129  来源: 互联网

标签:Java String eat void 多态 public Animal class


多态polymorphism


概述

  • 多态性是指同一个操作作用于某一个对象时可以有不同的解释,产生不同的执行结果。

  • 多态存在的三个必要条件:

    • 需要存在继承实现关系
    • 方法的重写
    • 父类引用指向子类对象:Parent p = new Child()
  • 多态通过分离做什么和怎么做从一个角度实现了接口和实现进行分离,消除了类型之间耦合关系,提高了程序的拓展性和后期维护性。

  • 示例

    class Animal{
    	public String name;
    	
    	public void eat(){}
    }
    
    class Dog extends Animal{
    	public void eat(){
    		System.out.println("狗吃奥利给");
    	}
    }
    
    class Cat extends Animal{
    	public void eat(){
    		System.out.println("猫吃小老鼠");
    	}
    }
    
    public class Test {
    	public static void main(String[] args) {
    		Animal dog = new Dog();
    		Animal cat = new Cat();
    		dog.eat();
    		cat.eat();
    	}
    }	
    
  • 输出

    狗吃奥利给
    猫吃小老鼠
    

对象的上下转型

  • 多态的转型分为向上转型向下转型两种。

向上转型

  • 多态本身就是向上转型过的过程,比如上面我们把狗类实例化时将其声明为了动物类,这就是向上转型,即从一个较专用类型转向一个较通用类型。
  • 向上转型时可能造成方法的丢失,当父类不存在子类的方法时则此方法不能再用。

向下转型

  • 跟向上转型相反的过程,将已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型

  • 强转是有风险的,我们使用instanceof关键字来判断左边的对象是否为右边的类的实例

  • 示例

    class Animal{
    	public String name;
    	
    	public void eat(){}
    }
    
    class Dog extends Animal{
    	public void eat(){
    		System.out.println("狗吃奥利给");
    	}
    }
    
    class Cat extends Animal{
    	public void eat(){
    		System.out.println("猫吃小老鼠");
    	}
    }
    
    public class Test {
    	public static void main(String[] args) {
    		Animal dog = new Dog();
    		Animal cat = new Cat();
    		dog.eat();
    		
    		if(cat instanceof Cat){
    			Cat mimi =(Cat)cat;
    			mimi.eat();
    		}else{
    			System.out.println("cat不是Cat的对象");
    		}
    		
    	}
    }
    
    
  • 输出

    狗吃奥利给
    猫吃小老鼠
    

多态案例-打印机

  • 代码

    class School{
    	private Printer type;
    	
    	public void anZhuang(Printer type){
    		this.type = type;
    	}
    	public void print(String contex){
    		type.print(contex);
    	}
    }
    
    
    class Printer{
    	public String type;
    	public void print(String contex){}
    }
    
    class ColorPrinter extends Printer{
    	public void print(String contex){
    		System.out.println("彩色打印机打印:" + contex);
    	}
    }
    
    class BawDayin extends Printer{
    	public void print(String contex){
    		System.out.println("黑白打印机打印:" + contex);
    	}
    }
    
    class PinDayin extends Printer{
    	public void print(String contex){
    		System.out.println("针打印机打印:" + contex);
    	}
    }
    
    public class Printor {
    	public static void main(String[] args) {
    				
    		School s = new School();
    		ColorPrinter c = new ColorPrinter();
    		s.anZhuang(c);
    		s.print("花花世界迷人眼,没有颜值别赛脸");
    		
    		BawDayin b = new BawDayin();
    		s.anZhuang(b);
    		s.print("刀不锋利马太瘦,你拿什么和我斗");
    		
    		PinDayin p = new PinDayin();
    		s.anZhuang(p);
    		s.print("辉煌岁月人人有,别把一刻当永久");
    	}
    }	
    
  • 输出

    彩色打印机打印:花花世界迷人眼,没有颜值别赛脸
    黑白打印机打印:刀不锋利马太瘦,你拿什么和我斗
    针打印机打印:辉煌岁月人人有,别把一刻当永久
    

❤️ 本回完!❤️ ❤️ ❤️

标签:Java,String,eat,void,多态,public,Animal,class
来源: https://blog.csdn.net/weixin_49638344/article/details/120182519

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有