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) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录 ...
随机推荐
- LeetCode OJ:Linked List Cycle II(循环链表II)
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Note ...
- vs中: 错误,未定义的标识符getline 的解决方法
这种情况一般都是,在使用的时候没有include<string>而导致的,加上就可以正确编译通过
- jQuery中this与$(this)的区别
起初以为this和$(this)就是一模子刻出来.但是我在阅读时,和coding时发现,总不是一回事,这里就谈谈this与$(this)的区别. jQuery中this与$(this)的区别 $(&q ...
- 15 分钟学会 Eclipse GMF
背景 坦白说:过去在 Eclipse 里使用 Graphical Editor Framework(GEF)创建图形化编辑器 既慢又痛苦.这个过程包括理解复杂的框架和大量的冗余代码.但也说明 GEF ...
- ORM版,学生管理系统03
关于老师信息管理 建立多对多关系 第一种(通过外键建立) 自己写类,自己使其建立关系 缺点: 不能用Django ORM 多对多操作的语法 class Teacher(models.Model): t ...
- 使用iptables nat进行端口转发
1.将发向HostA:PortA的请求转发到HostB:PortB iptables -t nat -A PREROUTING -p tcp -i eth0 -d HostA --dport Port ...
- HttpWebRequest传值
From:发送方 class Program { static void Main(string[] args) { string strId = "zhangsan"; &quo ...
- 洛谷 P1312 Mayan游戏
题解:搜索+模拟 剪枝: 最优性剪枝:x从小到大,y从小到大,第一次搜到的就是字典序最小 的最优解. 最优性剪枝:把一个格子和左边格子交换,和左边格子和右边格 子交换是等价的,显然让左边格子和右边交换 ...
- springboot 自定义属性
前言 spring boot使用application.properties默认了很多配置.但需要自己添加一些配置的时候,我们如何添加呢 1.添加自定义属性 在src/main/resources/a ...
- 如何调试Excel VBA代码
Excel VBA出错时给出的错误信息极少,需要充分利用各种工具来进行调试. 1.编译错误 常见的编译错误有: 错误的源代码格式,比如if后面缺少then:在编辑器中该行会变成红色. 错误的语法结构, ...