多态性(Polymorphism):一个东西,在不同的情况下,呈现出不同的行为
两类:
静态多态性:函数重载
void add(int a,int b){}
void add(int a,int b,int c){}
调用:
add(1,2); add(3,4,5);
动态多态性:在面向对象中,父类引用可以指向子类对象
性质:
(1)父类引用能够调用的函数都是子类中的函数
(2)子类中特有的函数对父类不可见

  1. //在面向对象中,父类引用可以指向子类对象
  2. class Dialog{
  3. void fun1(){ System.out.println("Fun1"); }
  4. void show(){ System.out.println("父类show");}
  5. }
  6. class FontDialog extends Dialog{
  7. void fun2(){ System.out.println("Fun2"); }
  8. void show(){ System.out.println("子类show");}
  9. }
  10. class Main{
  11. public static void main (String[] args) {
  12. Dialog d = new FontDialog();//动态多态性的基础
  13. d.fun1();
  14. //d.fun2(); 报错
  15. d.show();
  16. }

作用:用于两个场合
(1)形参为父类类型,可以传入子类对象做实参
void fun(Dialog d){}
调用:
fun(new FontDialog());//也是对的
举例说明:二次开发
(2)返回类型为父类类型,实际上可以返回子类对象
Dialog fun(){
FontDialog fd=new FontDialog();
return fd;
}

  1. class Window{
  2. void clickMenu(Dialog d){ d.show(); }
  3. }
  4. class Dialog{ void show(){} }
  5. class FontDialog extends Dialog{
  6. void show(){ System.out.println("字体对话框显示"); }
  7. }
  8. //-----------------------------------------------
  9. class MyFontDialog extends Dialog{
  10. void show(){ System.out.println("漂亮对话框显示"); }
  11. }
  12. class Main{
  13. public static void main (String[] args) {
  14. new Window().clickMenu(new MyFontDialog());
  15. }
  16. }

抽象类——类似于C++中的虚基类
abstract class Dialog{ //抽象类
abstract void show();
}
性质:
(1)抽象类必须用abstract修饰
(2)抽象类中至少含有一个抽象函数
(3)抽象函数必须用abstract修饰,并且没有函数体
(4)抽象函数必须被子类重写,否则报错。除非子类也是抽象类
(5)抽象类不能被实例化,只能实例化其子类对象

  1. abstract class Dialog{ //抽象类
  2. abstract void show();
  3. void fun(){System.out.println("adfadf");}
  4. }
  5. class FontDialog extends Dialog{
  6. void show(){ System.out.println("字体对话框显示"); }
  7. }
  8. class Main{
  9. public static void main (String[] args) {
  10. Dialog d = new FontDialog();
  11. d.fun();
  12. }

抽象类中可以有普通函数
Java中还有一种比抽象类还要抽象的“类”,叫做接口(Interface)
只允许有抽象函数,不能有普通函数。

interface Dialog{ //接口
void show(); //默认就是public抽象函数
}
class FontDialog implements Dialog{
public void show(){ System.out.println("字体对话框显示"); }
}
(1)接口用interface修饰
(2)接口中的函数默认为public抽象函数
(3)接口用implements实现,不用extends继承
(4)一个类可以同时实现多个接口,用逗号隔开,但是不可以同时继承多个抽象类

  1. /抽象类中可以有普通函数,Java中还有一种比抽象类
  2. //还要抽象的“类”,叫做接口(Interface),
  3. //只允许有抽象函数,不能有普通函数。
  4.  
  5. interface Dialog{ //接口
  6. void show(); //默认就是public抽象函数
  7. }
  8. class FontDialog implements Dialog{
  9. public void show(){ System.out.println("字体对话框显示"); }
  10. }
  11. class Main{
  12. public static void main (String[] args) {
  13. Dialog d = new FontDialog();
  14. d.show();
  15. }

如果我们继承多个接口的话呢,如果在继承的过程当中我们遇到了重名 的方法,我们便会遇到错误,这个时候我们便需要一些改动。

  1. interface Dialog1{ //接口
  2. int show(); //默认就是public抽象函数
  3. void query();
  4. }
  5. interface Dialog2{ //接口
  6. void show(); //默认就是public抽象函数
  7. }
  8. class FontDialog implements Dialog1,Dialog2{
  9. public void show(){ }
  10. public int show(int s){ return s; }
  11. public void query(){}
  12. }

java之多态性的更多相关文章

  1. Java:多态性

    Java的多态性:发送消息给某个对象,让该对象自行决定响应何种行为. 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用. java的多态性要满足三个条件: 1.继承关系 2.在子类重写父类的 ...

  2. Java的多态性Polymorphism

    原文地址:http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html Java中多态性的实现 什么是多态 面向对象的三大特性:封装.继 ...

  3. 菜鸡的Java笔记 第二十二 - java 对象多态性

    本次只是围绕着多态性的概念来进行讲解,但是所讲解的代码与实际的开发几乎没有关系,而且多态一定是在继承性的基础上才可以操作的,        而本次将使用类继承的关系来描述多态的性质,实际的开发中不会出 ...

  4. 深入理解JAVA的多态性[转]

    昨天看到一个关于多态性的帖子,参考了回帖者的理解,加入了一些自己的看法,整理出来供大家参考,不一定完全正确,欢迎大家批评指正. (一)相关类 class A ...{         public S ...

  5. 【java虚拟机系列】从java虚拟机字节码执行引擎的执行过程来彻底理解java的多态性

    我们知道面向对象语言的三大特点之一就是多态性,而java作为一种面向对象的语言,自然也满足多态性,我们也知道java中的多态包括重载与重写,我们也知道在C++中动态多态是通过虚函数来实现的,而虚函数是 ...

  6. Java中多态性的实现

    class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A obj) ...

  7. Java虚拟机 - 多态性实现机制

    [深入Java虚拟机]之五:多态性实现机制——静态分派与动态分派 方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际 ...

  8. Java 语言多态性

    https://www.ibm.com/developerworks/cn/java/java-language-polymorphism/index.html 定义多态性 多态性是面向对象编程中的一 ...

  9. java的多态性(二)

    2013-10-16 19:44 9364人阅读 评论(25) 收藏 举报  分类: [JAVA开发]-----Java提高篇(36)  版权声明:本文为博主原创文章,未经博主允许不得转载.   目录 ...

随机推荐

  1. SVN的搭建及使用(三)用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突,重新设置用户名和密码等

    添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图: 这时候,你需要告知TortoiseSVN你的操作,如图: 加入以后,你的文件会变 ...

  2. Android的布局方式

    1.LinearLayout(线性布局) android:orientation="vertical" //布局 android:layout_width="wrap_c ...

  3. 设备上下文-CDC绘图细节

    一,原理: 设备上下文是连接程序与设备(屏幕,打印机)的中介.其内部封装的函数可以使得绘图程序一次书写,在各种设备上都能显示.作用相当于多语言翻译家. 设备上下文内部封装了写文本,绘制椭圆,矩形,直线 ...

  4. Arcgis for Js之featurelayer实现空间查询和属性查询

    空间查询和属性查询是常用的两种对数据的检索与查询方式,在本节,将讲述Arcgis for Js下如何实现featurelayer的这两种查询方式,先贴图给大家看看: 实现界面 属性查询 空间查询 看完 ...

  5. Leetcode 807. Max Increase to Keep City Skyline

    class Solution(object): def maxIncreaseKeepingSkyline(self, grid): """ :type grid: Li ...

  6. CoreDNS kubernetes 安装使用

     kubernetes 以前是skydns 后面变为 dnsmasq,coredns 也是一个不错的工具 1. 准备环境 安装 kubernetes 配置 kubelet 的cluster-dns 2 ...

  7. thinkphp的select和find的区别(转)

    做普通PHP项目转thinkphp时,字段自动完整匹配,ajax时前台数据一直取不到,后发现是select和find返回数据集有差异,参考下面方法修改. $this->ajaxReturn($m ...

  8. form表单中name和id区别

    HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字.图形.动画.声音.表格.链接等.HTML的结构包括头部(Head).主体(Body)两大部分,其中头部描述浏览器所需的信息,而主 ...

  9. Oracle记录(三) Scott用户的表结构

    在Oracle的学习之中,重点使用的是SQL语句,而所有的SQL语句都要在scott用户下完成,这个用户下一共有四张表,可以使用: SELECT * FROM tab; 查看所有的数据表的名称,如果现 ...

  10. Source Insight中文字体设置

    Source Insight是一个面向项目开发的程序编辑器和代码阅读工具,它拥有内置的对C/C++, C#和Java等程序的分析,分析你的源代 码并在你工作的同时动态维护它自己的符号数据库,并自动为你 ...