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

//在面向对象中,父类引用可以指向子类对象
class Dialog{
void fun1(){ System.out.println("Fun1"); }
void show(){ System.out.println("父类show");}
}
class FontDialog extends Dialog{
void fun2(){ System.out.println("Fun2"); }
void show(){ System.out.println("子类show");}
}
class Main{
public static void main (String[] args) {
Dialog d = new FontDialog();//动态多态性的基础
d.fun1();
//d.fun2(); 报错
d.show();
}

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

class Window{
void clickMenu(Dialog d){ d.show(); }
}
class Dialog{ void show(){} }
class FontDialog extends Dialog{
void show(){ System.out.println("字体对话框显示"); }
}
//-----------------------------------------------
class MyFontDialog extends Dialog{
void show(){ System.out.println("漂亮对话框显示"); }
}
class Main{
public static void main (String[] args) {
new Window().clickMenu(new MyFontDialog());
}
}

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

abstract class Dialog{ //抽象类
abstract void show();
void fun(){System.out.println("adfadf");}
}
class FontDialog extends Dialog{
void show(){ System.out.println("字体对话框显示"); }
}
class Main{
public static void main (String[] args) {
Dialog d = new FontDialog();
d.fun();
}

抽象类中可以有普通函数
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)一个类可以同时实现多个接口,用逗号隔开,但是不可以同时继承多个抽象类

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

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

interface Dialog1{ //接口
int show(); //默认就是public抽象函数
void query();
}
interface Dialog2{ //接口
void show(); //默认就是public抽象函数
}
class FontDialog implements Dialog1,Dialog2{
public void show(){ }
public int show(int s){ return s; }
public void query(){}
}

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. CSS: Flexbox

    Use flexbox to create a responsive website, containing a flexible navigation bar and flexible conten ...

  2. c#如何保存richtextbox的rtf格式

    C# codethis.rtbText.Rtf = @"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052" + @&qu ...

  3. 原生JavaScript获取css样式

    访问属性:obj.attr 或者 obj['attr'] 通过js访问style属性 : document.getElementById("main").style.backgro ...

  4. 【MFC】MFC改变对话框中静态文本的字体大小

    MFC改变对话框中静态文本的字体大小 2010/08/09 11:30 VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体.对于你的问题,需要首先用CreateFont来建立一个 ...

  5. Angular在render完成之后,执行Js脚本

    AngularJs中,如何在render完成之后,执行Js脚本 app.directive('onFinishRenderFilters', function ($timeout) { return ...

  6. Java中取整和四舍五入

    import java.math.BigDecimal;  import java.text.DecimalFormat; public class TestGetInt{  public stati ...

  7. LeetCode Next Greater Element III

    原题链接在这里:https://leetcode.com/problems/next-greater-element-iii/description/ 题目: Given a positive 32- ...

  8. gatsbyjs 了解

    1.  模型 2. 总结&&资料 从模型上可以看出和jamstack 提出的架构模型比较相似,可以看成是一个具体的实现,功能还是比较强大的 https://www.gatsbyjs.o ...

  9. 缓存(Cache)管理 ---- 系列文章

    利用Cache防止同一帐号重复登录 .net中Cache管理操作 系统缓存全解析 (下) 系统缓存全解析 (中) 系统缓存全解析 (上) 出处:http://www.cnblogs.com/luckd ...

  10. VUE API 重点

    VUE API 重点 生命周期方法 每个组件都有生命周期,是向 ReactJs 学习的. computed 在一个组件声明一个人,人有名,人有姓,输入姓和名.((&--&%--& ...