目录

一、多态小故事

二、走进多态

1、多态继承的三个必要条件

三、具体多态

四、抽象类多态

1、认识抽象类:

2、抽象类的特点:

五、接口类多态

1、认识接口

2、接口类的特点


前言:多态,顾名思义是对象有多种形态。继承是多态的基础,没有继承就没有多态。多态分为具体多态、抽象多态和接口多态。下面我们将从这三个方面具体的为大家介绍多态。

一、多态小故事

多态其实有点像葫芦娃的感觉,七个兄弟,七中不同的能力,他们的思想都传承于爷爷,都要降妖除魔!只是各自的方法不同!

 爷爷说:孙儿们啊,一定要长大出掉蝎子精和蛇精啊!

大娃说:爷爷看我的,我用巨石砸死他们!

 二娃说:“爷爷别怕我有顺风耳和千里眼!”

三娃说:“爷爷看我用千里眼、顺风耳去帮大娃!”

四娃说:“爷爷我会喷火!,让我烧了他们!”

五娃说:“我会喷水,让我淹了这些妖怪!!!”

六娃说:“我会隐身,我去救哥哥他们!”

七娃说:“爷爷看我,用我的宝葫芦,收了这些妖怪!”

因为爷爷教育葫芦娃要降妖除魔,保卫一方平安!所以每个葫芦娃都有自己的绝招来斩妖除魔!爷爷并没有说怎么除魔!所以每个葫芦娃都有自己的方法!在面对对象的多态里面,“爷爷”就像一个抽象类,“葫芦娃”继承了爷爷的思想,并用自己的方法除魔!每个“葫芦娃”就是子类拥有自己独特的属性和行为。比如火娃能喷火,水娃能喷水,都有自己独特的属性,便有不同的行为!

蛇精的如意,蝎子精也可以用!如意可以理解为一个接口!我可以继承到我的实现类蛇精和蝎子精身上!

讲到这里大概应该有个大概的了解了!那么辉仔带大家更加理论的学习多态!

二、走进多态

多态就是对象面对不同事物,在不同时刻,具有不同的形态。就像你用steam玩游戏,你可能会玩自由城类的GTA5、也有可能玩大逃杀模式PUBG、还有可能玩FPS竞技的CSGO。他们的共性都是通过steam这个游戏平台进行游戏,但是在不同的时刻,具有不同的内容与表现形式。你可以随意在steam添加游戏或者删除游戏,说明了其有很强的扩展性与替换性。并且每个游戏互不冲突,你玩CSGO的时候,不会影响其他游戏的运行。说明了减少了耦合行。

通过steam这个列子我们能发现,多态具有以下优点

优点1:扩展性和替换性强。     优点2:减少了类与类之间的耦合性

优点3:灵活性和简化性。

1、多态继承的三个必要条件

继承、子类重写父类方法、父类引用指向子类对象。

三、具体多态

我个人理解具体类多态,就是父类能够被实例化,可以实现自己的具体行为的。子类可以调用父类的方法和子类自己特有的方法。在实际使用中其实几乎不用。没有多大的意义。所以这里只进行简单的描述。

四、抽象类多态

1、认识抽象类:

什么是抽象类呢?我理解的抽象类是多个具有共性的子类归纳出来的一个父类。是一个由下到上的一个过程。就像中国人用筷子吃饭、印度人用手抓饭、欧洲人习惯用刀叉吃饭。他们的共性就是吃饭的方式,具体的实现都是不同的。是一般到特殊的过程。而他们的共性归纳出了这个抽象类,因为一个父类无法具体实现三种不同的行为,它只需要一种模糊的概念——吃饭的方式,具体怎么吃,那就用子类自己去实现。

2、抽象类的特点:

①抽象类必须用abstract来修饰。

public abstract class 类名 {}

②抽象类中的抽象方法,可以有,也可以没有。但是!没有的话就没啥意义。

public abstract void 方法名();

③抽象如何实例化,采用多态的方式,这就是抽象类的多态。

向上转型:父类 对象名 = new 子类()

编译看父类,执行看子类。缺点:不能实例化子类特有的方法。

向下转型:子类 对象名 = (子类)父类引用

④ 抽象类的成员特点。

❶成员变量               ❷构造方法        ❸成员方法
   既可以是变量        空参构造           抽象方法
   也可以是常量        空参构造           普通方法

代码测试:

//抽象类
public abstract class Animal {private int age = 20;private final String city = "北京";public Animal() {}public Animal(int age) {this.age = age;}public void show() {age = 40;System.out.println(age);
//        city = "上海";System.out.println(city);}public abstract void eat();}//猫类
public class Cat extends Animal {@Overridepublic void eat() {System.out.println("猫吃鱼");}
}//测试类
public class AnimalDemo {
public static void main(String[] args) {Animal a = new Cat();a.eat();a.show();}
}

五、接口类多态

1、认识接口

如果要给接口下定义,那么是这样的,接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。接口注重的是对行为的抽象,而抽象是对属性和行为的抽象。一般情况下类只能继承一个抽象类。所以抽象类主要表达对象根源性问题,就是对象是什么。而接口侧重于对象能做什么。就像学生会跑,狗会跑,他们的共性是跑这样理解就不太对了。学生是人,狗是动物。他们的行为,可以用接口实现。这样抽象类回到了自己的本质工作上,接口就单纯的变成一个体系外的额外功能。说明接口是由上到下,是因为有这个行为,才实例到有需求的类上。

2、接口类的特点

①接口类必须用interface来修饰。

public interface 接口名 {}

②类实现接口用implements表示

public class 类名 implements 接口名 {}

③接口如何实例化,采用多态的方式,这就是接口类的多态。

④ 接口的实例,要不重写接口的抽象方法,要不实例进行抽象。

⑤接口成员特点

❶成员变量
           只能是常量,默认修饰符为:public static final
      ❷构造方法
           接口中没有构造方法
      ❸成员方法
           接口中可以有抽象方法,默认修饰符为:public abstract

⑥接口中还可以存在默认方法、静态方法和私有方法

❶默认方法

格式:

public default void show3() { }

解释:

默认方法不是抽象方法,所以不强制被重写。但是可以被重写,重写的时候去掉default关键字 (public可以省略,default不能省略)。

❷静态方法

格式:

public static 返回值类型 方法名(参数列表) {   }
  public static void show() {}

解释:

静态方法只能通过接口名调用,不能通过实现类名或者对象名调用

( public可以省略,static不能省略)

❸私有方法

格式:

private static void method() {  }

解释:

默认方法可以调用私有的静态方法和非静态方法
静态方法只能调用私有的静态方法

代码测试:

//动物类
public abstract class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public abstract void eat();
}//跳高接口
public interface Jumpping {public abstract void jump();
}//猫类
public class Cat extends Animal implements Jumpping {public Cat() {}public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("猫吃鱼");}@Overridepublic void jump() {System.out.println("猫可以跳高了");}
}//测试类
public class Cat extends Animal implements Jumpping {public Cat() {}public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("猫吃鱼");}@Overridepublic void jump() {System.out.println("猫可以跳高了");}
}

辉仔故事也讲了,理论也讲了,希望大家多多点赞呀!评论!每一次点赞都是对辉仔的激励!!!

辉仔日记之学代码第八期——葫芦娃原来是多态!相关推荐

  1. 辉仔日记之学代码第十八期——Mysql事务

    目录 一.事务的概念和特性 1.概念: 2.特性: 二.MySQL存储引擎 三.执行事务的语法和流程 1.事物的创建 2.注意事项 四.事务的隔离级别 1.事务并发问题是如何产生的? 2事务并发问题: ...

  2. 辉仔日记之学代码第三期——家庭收支小程序

    目录 标题1:操作主流程 标题2:主菜单 标题3:选项1 标题4:选项2 标题5:选项3 标题6:回到选项1 标题7:选项4 标题8:总结 前言::时隔一天我又回来啦,今天的任务只是编写一个超难超难的 ...

  3. 辉仔日记之学代码第十一期——集合来开会

    目录 一.Collection是个单列集合 1.集合的Iteratoriterator遍历方法 二.Collection的子类Set接口 1.Set集合的特点 2.Set集合最常用的HashSet 3 ...

  4. 辉仔日记之学代码第十五期——IO流图书管理系统

    嚯嚯嚯!今天也是写日记的一天啦! 温故而知新,完成了一个项目,及时总结才能继续成长!在写图书管理系统想过放弃,因为太多要注意的点,各种各样的问题.重打了很多的代码,几乎是推到重来!功夫不负有心人,果然 ...

  5. 辉仔日记之学代码第二十一期——单例模式

    单例模式的定义 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式. 单例模式有 3 个特点 单例类只有一个实例对象: 该单例对象必须由单例类自行创建: 单 ...

  6. 编程迷宫_跟我学编程第十期——迷宫游戏

    编程改变世界 图源:APPLE官网 01 效 果 演 示 IEffect demonstration 跟我学编程公益课程又和你见面了!这期ray老师将带大家来学习编程制作一个迷宫小游戏! 怎么样,你也 ...

  7. [老老实实学WCF] 第八篇 实例化

    老老实实学WCF 第八篇 实例化 通过上一篇的学习,我们简单地了解了会话,我们知道服务端和客户端之间可以建立会话连接,也可以建立非会话连接,通信的绑定和服务协定的 ServiceContract 的S ...

  8. 优化if-else代码的八种方案

    前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案. 优化方案一:提前return,去除不必要的else 如 ...

  9. 下载的长数据怎么分开R语言_R语言学习笔记(一):学代码,我们从最基础的开始...

    *本文是本人在学习 res method 课程中反复学不会被自己蠢到的笔记作品,仅供本人娱乐使用,如果恰好里面的内容也能帮到你,那可真是太好了. 同学们,我们这节课来学习R语言,那么我们为什么要学习R ...

最新文章

  1. 徒手撸框架--实现 RPC 远程调用
  2. 计算机调查取证分析篇
  3. Focal Loss升级 E-Focal Loss让Focal Loss动态化,类别极端不平衡也得到提升
  4. scrapy的name变量_python-将file_name参数传递给管道以在scrapy中...
  5. boost::fusion::as_deque用法的测试程序
  6. php音频添加语音,PHP生成语音
  7. iphone如何使用CoreNFC
  8. VS编译器安装Eigen
  9. eslint是什么_一起来用 eslint 吧
  10. Since WWDC released the first developer
  11. Git显示漂亮日志的小技巧
  12. Gerrit代码提交: [remote rejected] prohibited by gerrit: ref update access denied报错解决
  13. 第一财经周刊:硅谷就是这样
  14. 人工智能必备知识储备之“数学篇”
  15. Xshell使用教程及WinSCP使用教程
  16. RHEL8【基础篇】 更改hostname
  17. interpersonal skill training
  18. 利用tabindex修复luckysheet点击工具栏按钮后Ctrl+z无效的问题
  19. Matlab求解线性方程组的三种方法(wzl)
  20. 仙境传说RO:添加商店物品教程

热门文章

  1. Redis详细讲解-狂神视频学习
  2. linux修改vim配色,Vim配色方案设置(更换Vim配色方案)
  3. java集合:删除集合中的信息
  4. 强制删除文件——直接发IRP到文件系统
  5. iphone 信息提示类
  6. 解决苹果手机按钮颜色与安卓机不一致的问题
  7. Eclipse 配置搜狗(Sogou)代理
  8. Linux文件权限大全(chmod+chown)
  9. 【李宏毅深度学习CP18-19】自监督学习之BERT
  10. 解决360 兼容模式下问题。