zoukankan      html  css  js  c++  java
  • 【小白日记】Java中多态的理解随记

    题外话:当初硬头皮承接项目之时,就已经做好了边学习边做项目的打算。这样以来可以极大的缩短学习时间。(先试着做,哪不会了再学习)好处是可以在实践当中积累丰富的经验,但缺点是这样的方式对知识的掌握扎实程度远远不如一步一个脚印的学过来…待后期有充足时间之后再整体性的对知识进行一个补足。
    btw,简单说一下现在项目的计划和基本进度。目前老师已经给出所需要的需求。(并不是很多),基本基本已经确定了后端用ssm来搭建,前端这边选用了AdminLTE2来进行搭建。


    多态

    概念

    摘自@菜鸟教程
    多态是同一个行为具有多个不同表现形式或形态的能力。
    多态就是同一个接口,使用不同的实例而执行不同操作,

    多态的语法格式

    • 父类类名 引用名称 = new 子类类名();
    • 当是多态时,该引用名称只能访问父类中的属性和方法,但是优先访问子类重写以后的方法

    Example:

    Student s = new girl();
    

    多态存在的条件

    • 子类必须继承父类
    • 子类重写父类的方法
    • 父类类名 引用名称 = new 子类类名();

    多态.好处()?

    • 减少代码的冗余性
      建了一个例子方便理解

    Example:

    • 目的:主人喂养宠物
    1. 新建Pet类
    public class Pet {
    
    	public void eat() {
    		System.out.println("I'm eating....");
    	}
    }
    
    1. 新建Dog、Cat类
      继承Pet属性并重写eat方法
    class Dog extends Pet{
    	
    	public void eat() {
    		System.out.println("Eating.. WangWang!");
    	}
    }
    class Cat extends Pet{
    	
    	public void eat() {
    		System.out.println("Eating.. Miao!");
    	}
    }
    
    1. 新建Master类
    public class Master {  
    	//传统方法
    	public void feed(Dog dog) {   
    		dog.eat();
    	}
    	public void feed(Cat cat) {
    		cat.eat();
    	}
    }
    
    1. 新建Test主类
    public class Test {
    
    	public static void main(String[] args) {
    		//Create Master
    		Master m = new Master();
    		//Create Dog
    		Dog d = new Dog();
    		//Master feed Pet
    		m.feed(d);
    		//Create Cat
    		Cat c = new Cat();
    		//Master feed Pet
    		m.feed(c);
    		
    		System.out.println("-------------------------------------------------------");
    	}
    		
    }
    

    这时发现 如果按照传统方法编写这个程序,那么每当添加一种动物就要多写(告诉主人)一种动物的喂养方法
    以此类推,如果你有上百种宠物 你就需要编写同样的方法 大大增加了代码量
    这时候多态就跑来挽救世界了
    当我们改写为多态方法时你会发现

    • Master类
    public class Master {  
    
    	//多态
    	public void feed(Pet pet) {
    		pet.eat();
    	}
    }
    

    对的 对比一哈

    • 传统方法 Master类
    public class Master {  
    	//传统方法
    	public void feed(Dog dog) {   
    		dog.eat();
    	}
    	public void feed(Cat cat) {
    		cat.eat();
    	}
    }
    
    • run 一下吧

    运行结果
    Eating… WangWang!
    Eating… Miao!


    多态中的两种类型转换(待补充)

  • 相关阅读:
    Codeforces C. Almost Equal (数学规律)
    codeforce D. Shortest Cycle(floyd求最短环)
    Codeforces 1204D2. Kirk and a Binary String (hard version) (dp思路)
    codeforces 1204C Anna, Svyatoslav and Maps(floyd+dp)
    hdu 6214 Smallest Minimum Cut(最小割的最少边数)
    扩展欧几里得求解同余方程(poj 1061)
    poj 3281Dining(网络流 拆点)
    poj 3057(bfs+二分匹配)
    买鱼杂感
    geotrellis使用(十四)导出定制的GeoTiff
  • 原文地址:https://www.cnblogs.com/WeiHaoLee/p/10823339.html
Copyright © 2011-2022 走看看