java之多态性
多态性(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之多态性的更多相关文章
- Java:多态性
Java的多态性:发送消息给某个对象,让该对象自行决定响应何种行为. 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用. java的多态性要满足三个条件: 1.继承关系 2.在子类重写父类的 ...
- Java的多态性Polymorphism
原文地址:http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html Java中多态性的实现 什么是多态 面向对象的三大特性:封装.继 ...
- 菜鸡的Java笔记 第二十二 - java 对象多态性
本次只是围绕着多态性的概念来进行讲解,但是所讲解的代码与实际的开发几乎没有关系,而且多态一定是在继承性的基础上才可以操作的, 而本次将使用类继承的关系来描述多态的性质,实际的开发中不会出 ...
- 深入理解JAVA的多态性[转]
昨天看到一个关于多态性的帖子,参考了回帖者的理解,加入了一些自己的看法,整理出来供大家参考,不一定完全正确,欢迎大家批评指正. (一)相关类 class A ...{ public S ...
- 【java虚拟机系列】从java虚拟机字节码执行引擎的执行过程来彻底理解java的多态性
我们知道面向对象语言的三大特点之一就是多态性,而java作为一种面向对象的语言,自然也满足多态性,我们也知道java中的多态包括重载与重写,我们也知道在C++中动态多态是通过虚函数来实现的,而虚函数是 ...
- Java中多态性的实现
class A ...{ public String show(D obj)...{ return ("A and D"); } public String show(A obj) ...
- Java虚拟机 - 多态性实现机制
[深入Java虚拟机]之五:多态性实现机制——静态分派与动态分派 方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际 ...
- Java 语言多态性
https://www.ibm.com/developerworks/cn/java/java-language-polymorphism/index.html 定义多态性 多态性是面向对象编程中的一 ...
- java的多态性(二)
2013-10-16 19:44 9364人阅读 评论(25) 收藏 举报 分类: [JAVA开发]-----Java提高篇(36) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录 ...
随机推荐
- OC-SEL 和 Class
[认识选择器]============================================ SEL 1.选择器(SEL)是一个变量类型. 2.选择器用来装成员消息(成员方法) people ...
- 如何在100万文字的文章中 200ms内 快速提取 替换 上万个关键字
关键点: 关键字 组合 成一棵 hash 树 ( 有属性就直接移动指针到下一个字对象, 没有属性就创建子对象, 再移动指针; 第二次循环在子对象看有没这个属性 ) 探测针 标记结束 ...
- Django的model查询操作 与 查询性能优化
Django的model查询操作 与 查询性能优化 1 如何 在做ORM查询时 查看SQl的执行情况 (1) 最底层的 django.db.connection 在 django shell 中使用 ...
- GitHub Blog创建以及本地管理
创建 注册GitHub账户 首页点击新建仓库 New repository repository name必须为 Owner.github.io EX:我的Owner下为pualus,那么就应为pua ...
- 关于python模拟登录的一点实践
不久前,通过网上查阅各种资料,一直想利用python来实现模拟登录的功能,通过csdn汪海的博客学会了一点,但也只能算个皮毛,亦或皮毛都算不上. 边查阅资料边写一个小东西,起初想写一个程序,通过暴力破 ...
- BJOI2019 游记
BJOI 2019 游记 Day 1 开场拿到 \(T1\) 发现可以转成求平均 \(log\) 直接 \(AC\) 自动机上 \(Dp\) 一波即可 \(T2\) 发现是到数论神仙题,大概能想到要用 ...
- python笔记-4(装饰器、生成器、迭代器)
一.熟练掌握装饰器的原理 (在装饰器学习的过程中,查了看了很多资料,个人感觉走了很多的弯路,这个笔记,分享我的理解,希望能帮助到一些人.本文对装饰器的描述,侧重点是条理与逻辑思路,想通过从无到有的方式 ...
- nginx 流量拷贝模块 ngx_http_mirror_module 安装试用
1. 下载源码编译 https://nginx.org/download/nginx-1.13.4.tar.gz 2. 下载依赖模块包 这里直接yum 安装 yum -y instal ...
- 转: 使用Jmeter创建ActiveMQ JMS POINT TO POINT请求,环境搭建、请求创建、插件安装、监听服务器资源等
转自:http://www.cnblogs.com/qianyiliushang/p/4348584.html 准备工作: 安装JDK,推荐使用1.7以上版本,并设置JAVA_HOME 下载Jmete ...
- 在actionbar中加入item的方法
首先在menu文件夹中创建post.xml <?xml version="1.0" encoding="utf-8"?> <menu xmln ...