多态、抽象类

多态、抽象类

多态:

  多态:多种形式;

    多态是指一个对象有多种形式的能力;

     多态描述:相同的行为;不同的实现;

  多态分类:

    静态多态:程序在编译时,系统就能决定调用哪个方法,所以称为编译时多态;实现的方式就是方法的重载,调用规则是依据对象在定义时的类型相应的调用对应类中的重载方法;

    动态多态:在运行中系统才能动态确定方法所指的对象,所以称为运行时多态,实现的方式是重写父类中的同名成员方法,动态多态主要是通过动态绑定和重写机制来实现。

  技术基础:

 1、向上转型技术:一个父类的引用变量可以指向不同的子类对象,或者一个子类对象可以被当做一个父类类型;

 2、instanceof关键字:instanceof关键字用于判断运行时对象的真正类型;

 3、动态绑定技术:运行时根据父类引用变量所指对象的时机类型执行相应的子方法,从而实现多态性;

  基本数据类型的转型:

 1、自动类型转换、隐式转换、从小范围的数据类型往大范围的数据类型转换

  无风险/肯定成功;

int a = 'b';
double f = 254;

 2、强制类型转换、显式转换、从大范围的数据往小范围的数据类型转换

  有风险/丢失精度/无意义

a = (int)3.14;
char c = (char)12345670;

  引用数据类型的转换——只有有继承关系的类才能使用类型转换

public class PetBean {private String name;private int 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 class DogBean extends PetBean {private int boneNum;public int getBoneNum() {return boneNum;}public void setBoneNum(int boneNum) {this.boneNum = boneNum;}} 
public class TestMain {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub

 1、向上类型转换、自动类型转换、隐式类型转换、从小范围的数据类型往大范围的数据类型转换

  无风险\肯定成功

        PetBean p = new PetBean();//父类的引用可以指向子类的对象

 2、向下类型转换、强制类型转换、显式转换、从大范围的数据往小范围的数据类型转换

  有风险/可能会抛出异常,终止程序的运行

  只有运行起来后,确实是本类引用指向本类对象或父类引用指向子类对象才可以成功

        DogBean dog = (DogBean)p;

  多态应用——多态参数:

    多态参数就是当方法的某个形式参数是一个引用的时候,与该引用兼容的任何对象都可以传递给方法,从而允许方法接受不同数据类型的形式参数。

  多态应用——异构集合:

    多态另一个常见应用是穿件一个不是同一类型,但是有共同父类的数据集合,不同对象的集合称为异构集合。

 

多态小结:

  使用父类类型的引用指向子类的对象;

  该引用只能调用父类中定义的方法,不能调用子类中独有的方法;

  如果子类中重写了父类中的一个方法,那么在调用该方法的时候,将会调用子类中的这个方法;

  在多态中,子类可以调用父类中的所有方法;

 

抽象类:

  将一个方法声明为抽象方法有两个结果:

 1、类也必须声明为抽象类,如果一个类包含了一个抽象方法,那么该类也必须是抽象类;

 2、任何子类必须重写抽象方法,除非子类本身也是抽象类;

  关键字: abstract;用这个关键字修饰类的时候,表示这个类是抽象类;

   注: 抽象类不能产生对象,它只能充当父类;

  1、有抽象方法的类一定是抽象类;

  2、抽象类不一定有抽象方法;

  3、抽象类除了类有abstract修饰符,它内部跟普通类一样,可以有:属性、构造、已经实现的方法;

例:

public class Boy {private Girl myGirl;public Girl getMyGirl() {return myGirl;}public void setMyGirl(Girl myGirl) {this.myGirl = myGirl;}public void kiss(){System.out.println("让我亲一个嘛~~~");this.myGirl.response();}
}
public abstract class Girl {//abstract关键字表示抽象//当它修饰方法的时候,表示类有这个方法,但是不能确定这个方法的实现,应该由它的子类去确定public abstract void response();}
public class PureGirl extends Girl {

        //子类在继承抽象类的时候,必须重写抽象类的抽象方法。
        //否则这个子类也必须是抽象类。

	@Overridepublic void response() {// TODO Auto-generated method stubSystem.out.println("嗯~~~你好坏~~~");}}
public class BoldGirl extends Girl {

        //子类在继承抽象类的时候,必须重写抽象类的抽象方法。
        //否则这个子类也必须是抽象类。

	@Overridepublic void response() {// TODO Auto-generated method stubSystem.out.println("老娘飞起来一脚~~~~");}}
public class TestLove {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubBoy boy = new Boy();System.out.println("请选择你喜欢的女孩类型:1、纯情;2、野蛮。");int choice = new Scanner(System.in).nextInt();Girl girl = null;switch(choice){case 1:girl = new PureGirl();break;case 2:girl = new BoldGirl();break;}boy.setMyGirl(girl);boy.kiss();}}

 

  

  

posted on 2016-12-10 14:53 ai哟 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/scxu28/p/6155709.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 首页布局变换,Android XML布局与View之间的转换

Android的布局方式有两种,一种是通过xml布局,一种是通过java代码布局,两种布局方式各有各的好处,当然也可以相互混合使用。很多人都习惯用xml布局,那xml布局是如何转换成view的呢?本文从源码的角度来简单分…

C++的ORM工具比较

用过Java的都知道SSH框架,特别对于数据库开发,Java领域有无数的ORM框架,供数据持久层调用,如Hibernate,iBatis(现在改名叫MyBatis),TopLink,JDO,JPA……非常方便实用。用过C#的同学们…

电脑技巧:Win10自带存储感知功能给电脑磁盘瘦身

今天给大家分享Win10自带存储感知功能给电脑磁盘瘦身功能,希望对大家能有所帮助!1、什么是存储感知Win10存储感知功能属于Win10操作系统的一大亮点,自带有AI的存储感知功能发挥其磁盘清理功能,它可以在操作系统需要的情况下清理不…

线程的优先级

setPriority(); 设置线程的优先级Thread类里面的 MIN_PRIORITY 1 表示最小优先级 NORM_PRIORITY 5 表示默认优先级 MAX_PRIORITY 10 表示最大优先级

电脑存储:A盘、B盘知识介绍,为何总是电脑磁盘从C盘开始

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

使用axis发送xml报文,返回并解析报文实例

前段时间刚好学了一点webservice,因此想和大家分享一下我的成果,因为能力原因,只能做个小实例,望大家见谅! 此实例的思路是:(1)用String类型构造好需要发送的报文;(2)使用axis调用服…

某游戏在华为鸿蒙,华为鸿蒙系统运行安卓游戏出现新状况!安卓换皮论被彻底打脸?...

虽然华为鸿蒙系统已经经过几轮的测试,准备在6月份大规模推送正式版本了,但现在依然还有一些杂音不绝于耳。最主要的争议点还是老生常谈的”鸿蒙系统到底是不是安卓系统的换皮“。支持鸿蒙系统安卓换皮的一方拿出过不少证据,比如安装包还是APK…

java为什么还需要分布式锁?

什么是锁? 在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。 而同步的本质是通过锁来实现的。为了…

电脑技巧:电脑插上U盘就死机或重启原因和解决办法

大家平时将u盘或其他可移动设备连接电脑插口的时候,不少电脑小白都碰到过操作系统自动重启甚至出现电脑死机的尴尬情况。针对u盘等外部设备连接引起的电脑死机问题,我们应该根据具体问题具体分析,找到原因就可以解决掉。接下来小编带大家看看…

使用UGUI绘制自定义几何图形

本文展示了如何使用UGUI绘制矩形,同理可绘制其他几何图形。 UGUI的渲染体系,简单来说所有的控件和可显示的元素都是Graphic。Graphic持有一个CanvasRenderer,通过SetVertices设置顶点,最终完成绘制。 举例来说,Image控…

android t类型参数,android – Kotlin属性:“属性的类型参数必须在其接收器类型中使用”...

我有以下简单的Kotlin扩展功能:// Get the views of ViewGroupinline val ViewGroup.views: Listget() (0..childCount - 1).map { getChildAt(it) }// Get the views of ViewGroup of given typeinline fun ViewGroup.getViewsOfType() : List {return this.views…

电脑技巧:分享七个解决烦人的弹窗广告的小技巧

目录 1、及时卸载用不到的垃圾软件 2、修改软件设置(关闭不需要的资讯、广告) 3、开机启动项中禁用不需要的应用 4、删除弹窗广告程序 5、提高操作系统阻止级别 6、禁止弹窗广告的任务计划 7、安装火绒杀毒软件设置弹窗广告拦截 最后总结 很多朋友经常会…

MySQL+Amoeba实现数据库主从复制和读写分离

MySQL读写分离是在主从复制的基础上进一步通过在master上执行写操作,在slave上执行读操作来实现的。通过主从复制,master上的数据改动能够同步到slave上,从而保持了数据的一致性。实现数据的读写分离能带来的好处有: 增加物理服务…

从操作系统层面描述线程的五种状态

[初始状态] 仅是在语言层面创建 了线程对象, 还未与操作系统线程关联 [可运行状态] (就绪状态) 指该线程已经被创建(与操作系统线程关联), 可以由CPU调度执行 [运行状态] 指获取了CPU时间片运行中的状态 当CPU时间片用完,会从[运行状态]转…

html桌面图标样式,如何更改图标样式,换桌面图标的方法

打开桌面,桌面上摆放了放多程序的快捷方式,我们每天打开电脑最先接触的就是这些快捷方式图标。时间长了,是不是感觉乏味了。可以换一换。比如,在我的电脑桌面上有这样一个图标,那怎样更改桌面图标?下面&…

电脑知识:笔记本电脑边充电边用,对电池有损害吗?

使用笔记本的时候,你们有没有这样的习惯,就是插电使用,充满到100%也不会拔掉充电头。 有人说这种行为会对电脑的电池造成伤害,这是真的吗?到底正确的使用是怎么样的?今天就跟大家解答一下这个疑惑。 首先&a…

硬件知识:电源开关上的“1“和“0“分别是什么意思

几乎所有的电器、灯具和插座上 只要带有电源开关 必然会出现“|”和“O”两个符号 如果只看符号判断 “|”和“O”到底代表什么含义呢? 你又能分清哪个是电路联通 哪个是电路断开吗? 很多人认为“O”是通电,“|”是断电 因为英语里开是OPEN 很…

c# 正则表达式 html标签,C#匹配HTML标签,正则表达式谁会?

米脂JS:function StripHtml(html){var scriptregex ".]*>[sS]*?";var scripts new RegExp(scriptregex, "gim");html html.replace(scripts, " ");//Stripts the ";var styles new RegExp(styleregex , "gim");html htm…