多态:

    同一个实体同时具有多种形式

    编译时的类型有声明该变量时使用的类型决定,运行时的类型有实际赋值给变量的对象决定
    如果编译时类型和运行时类型不同,就出现多态
例:
    class Preson{
}
class Teacher extends Preson{
} public class Demo {
public static void main(String args[]){
//这行代码就会产生多态
Preson p = new Teacher();
}
}
实现多态的机制:
父类的引用变量可以指向子类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的真正实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法
多态的作用:
 把不同的子类对象当作父类类型来看,可以屏蔽不同子类对象之间的差异,写出通用代码,做出通用编程,以适应需求的不断变化
          继承关系式多态产生的前提
例:
     //鸟类
class Brid{
public void eat() {
System.out.println("一般鸟类都吃虫子");
} }
//麻雀
class Sparrow extends Brid{
public void eat(){
System.out.println("我要吃虫子");
}
}
//老鹰
class Eagle extends Brid{
public void eat(){
System.out.println("我是空中霸主,我要吃肉");
}
}
//觅食
class Foraging{
/*public void feed(Sparrow sparrow){
sparrow.eat();
}
public void feed(Eagle eagle){
eagle.eat();
}
*/
/**
*上面这两个方法可以改进为下面这一个方法 ,利用多态可以达到一样的效果
*/
//直接把父类(鸟类)传进去
public void feed(Brid brid){
brid.eat();
}
}
public class TestDemo {
public static void main(String[] args) {
Foraging foraging = new Foraging(); Sparrow sparrow = new Sparrow();
/**
* 这行代码就体现了多态
*
* 运行时根据实际的类型寻找它实际类型的方法
*/
foraging.feed(sparrow); Eagle eagle = new Eagle();
foraging.feed(eagle); /**
* Eagle eagle = new Eagle();
*
* Dog eagle = new Eagle();
*
* Sparrow sparrow = new Sparrow();
*
* Dog sparrow = new Sparrow();
*
*
* 也可以改变声明类型,功能的实现也不会变
*/ }
}
分类:
        分类时多态,方法重载
        运行时多态,方法重写
 
静态方法不能被重写,但能被子类继承。
 因为方法的重写和对象有关,而static修饰的方法和对象无关
 
引用类型转换:
    向上转型:小--------->大 (子类---------->父类)自动转换
        把子类对象赋给父类变量
    向下转型:大--------->小(父类----------->子类)强制转换
        把父类对象强制转换成子类对象
        强转之前一般都要先判断(instanceof)
对象类型的判断:instanceof
    格式:对象  instanceof 类
    表示判断对象是否属于这个类的类型
    返回结果:Boolean型
 
ps:若要用来判断的对象与该类型没有继承关系,就不能使用instanceof
    
多态时方法的调用:
    当一个引用类型的变量若声明为父类的类型,但实际上引用的是子类的对象(多态情况)
        此时该变量不能在访问子类中自己特有的字段和方法
        若子类重写了父类的方法,那么此时通过变量访问到的方法,实际上是子类的方法
 
 
组合:
    一个类里包含另外一个类的引用,这种关系我们可以称为包含关系,也可称为”has a“的关系
 

面向对象三大特征之多态——Java笔记(七)的更多相关文章

  1. Java学习:面向对象三大特征:封装、继承、多态之封装性

    面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...

  2. Java中面向对象三大特征

    也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是&q ...

  3. Java的OOP三大特征之一——多态

    OOP(面对对象)三大特征之一——多态 What:多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活.抽象.行为共享.代码共享的优势,很好的解决了应用 ...

  4. OOP面向对象 三大特征 继承封装多态

    OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...

  5. Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。

    面向对象三大特征:封装性.继承性.多态性之多态性. extends继承或者implemens实现,是多态性的前提. 例如:小菜是一个学生,但同时也是一个人.小菜是一个对象,这个对象既有学生形态,也有人 ...

  6. Java_面向对象三大特征

    面向对象特征 面向对象三大特征: 继承, 封装, 多态 继承 继承: 子类可以从父类继承属性和方法 对外公开某些属性和方法 要点(eclipse中Ctrl+T查看继承结构) 1.父类也称超类, 基类, ...

  7. 封装继承多态-java面向对象三大特征

    第七章  封装和继承 一.面向对象的三大特征 封装.继承.多态 二.封装 将类的属性(字段)设置为私有的(private),并添加getter/setter方法操作属性. 注意:get|set方法的固 ...

  8. 面向对象三大特征之封装与static——(Java学习笔记四)

    面向对象     编程本质:以类的方式组织代码,以对象的方式组织(封装)数据 对象:具体的事物,某个类的对象(实例) 类:是对对象的抽象,用于描述同一类型的对象的一个抽象概念 对象和类的关系:特殊到一 ...

  9. java之面向对象三大特征(封装,继承,多态)

    一.封装 封装是指将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的对外方法进行内部信息的操作和访问. 封装可以达到以下目的: 1)隐藏类的实现细节 2)让使用者只 ...

随机推荐

  1. sql中 in 、not in 、exists、not exists 使用方法和区别

    % 的一类. NOT IN:通过 NOT IN keyword引入的子查询也返回一列零值或很多其它值. 以下查询查找没有出版过商业书籍的出版商的名称. SELECT pub_name FROM pub ...

  2. 使用 WPF 创建单实例应用程序

    一个简单的例子就是大家在使用很多应用程序,例如在使用Microsoft Word 时会遇到一种情况,不管你打开多少个文档,系统一次只能加载一个winword.exe 实例.当打开新文档时,文档在新窗口 ...

  3. BeagleBone Black教训四局:简单LED对照实验

    BBB教训四局:简单LED对照实验 学习BBB董事会最终目的是做同样的想象单片机控制.但控制是不一样的想法,在所有(Linux在本质上,硬件设备的控制,以虚拟文件有关的设备下的读写),研究了几天头都大 ...

  4. Simple Automated Backups for MongoDB Replica Sets

    There are a bunch of different methods you can use to back up your MongoDB data, but if you want to ...

  5. Cocos2d-x学习笔记(9)(CCTextFieldTTF使用输入框)

    1.CCTextFieldTTF创建和使用 CCTextFieldTTF::create(const char* placeholder,const char* fontName.float font ...

  6. iphone内容开发技术学习

    一.iOS基础 1 开发环境搭建以及IOS组件.框架的概要介绍. 2 mac操作系统与iOS操作系统 3 xcode IDE开发环境的初始 二.C语言基础 1数据类型.表达式与控制流程语句 2数组.函 ...

  7. 用友财务总帐(GL)模BI数据ETL分析

    业务需求,如下面的: 现在用友总帐一家公司BI分析案例. /* Sql Server2012使用作业设置定时任务,为了保证有一天运行时间 */ /* 意temp1表里一定要保证要有记录,否则以temp ...

  8. 如何在 Swift 中优雅地处理 JSON

    阅读目录 在Swift中使用JSON的问题 开始 基础用法 枚举(Enumeration) 下标(Subscripts) 打印 调试与错误处理 后记   因为Swift对于类型有非常严格的控制,它在处 ...

  9. BestCoder Round #16

    BestCoder Round #16 题目链接 这场挫掉了,3挂2,都是非常sb的错误 23333 QAQ A:每一个数字.左边个数乘上右边个数,就是能够组成的区间个数,然后乘的过程注意取模不然会爆 ...

  10. uva10954 - Add All(multiset功能)

    题目:10954 - Add All 题目大意:求n个数的和,可是有点不一样的是题目要求计算最少花费.每次两个数相加,得到的那个数就是每次计算的cost. 解题思路:之前没有想到用multiset,自 ...