第三章 多态

polymorphism 多态 instance 例子
override 重载 constructor 构造器
ClassCastException 类型转换异常
upcasting 上抛 downcasting 向下转换
abstract 抽象

1.多态 是具有表现多种形态的能力的特征
同一个实现接口,使用不同的实例而执行不同的操作

2.子类向父类的转型
Dog dog=new Dog();
dog.eat();
Pet pet=new Dog();
pet.eat();
//Dog类继承自Pet类,调用的是子类重写的方法 而不是父类的方法

将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换.
此时通过父类引用变量调用的是子类覆盖或继承父类的方法,不是父类的方法
此时通过父类引用变量无法调用子类特有的方法

3.使用父类方法作为形参实现多态

//主人类
public class Master{
private String name="";
private int money=0;
public Master(String name,int money){
this.name=name;
this.money=money;
}

public void feed(Pet prt){
pet.eat();
}
public void feed(Dog dog){
dog.eat();
}
public void feed(Cat cat){
cat.eat();
}
//...省略代码
}

//测试类 领养宠物并喂食
public class Test{
public static void main(String[] args){
Master master=new Master("天命",100);
Pet pet=new Dog("doge","柴犬");
}
}
优势:减少代码量 提高代码的可扩展性和可维护性

4.使用父类作为方法返回值实现多态
//主人类
public class MasterP{
private String name="";
private int money=0;
public Master(String name,int money){
this.name=name;
this.money=money;
}
//领养宠物
public Pet getPet(int petType){
Pet pet=null;
if(petType==1){
pet=new Dog();
}else if(petType==2){
pet=new Cat();
}
return pet;
}
}

//Main方法
public class Test{
public static void main(String[] args){
int petType=input.NextInt();
Master m=new Master();
Pet pet=m.getPet(petType);
if(pet!=null){
//.......
}
}
}

实现多态的三个条件
继承的存在
子类重写父类方法
父类引用变量指向子类对象


5.父类到子类的转换(向下转型)
当向上转型发生后,无法调用子类特有的方法\
将一个指向子类对象的父类引用,称为向下转型,此时必须进行强制类型转换

Dog dog=(Dog)pet;
dog.CatchBorn();

6.instanceof 运算符
向下转型时 如果没有转换为真实子类类型 就会出现类型转换异常
在强制转换之前通过 instanceof 运算符进行检查对象的真实性
if(pet instanceof Dog){
Dog dog=(Dog)pet;

使用 instanceof 运算符时,对象的类型必须和 instanceof 的第二个参数所指定的类或接口在继承树上有上下级关系,否则会编译报错

}

预习笔记 多态 --S2 4.3的更多相关文章

  1. 第四章初始CSS3预习笔记

    第四章 初始CSS3预习笔记 一: 1: 什么是CSS? 全称是层叠样式表;/通常又称为风格样式表,.他是用来进行网页风格设计的; 2:CSS的优势: 1>内容以表现分离,即使用u前面学习的HT ...

  2. java学习笔记 --- 多态

    一.多态 (1)定义:同一个对象在不同时刻体现出来的不同状态.父类的引用或者接口的引用指向了自己的子类对象.   Dog d = new Dog();//Dog对象的类型是Dog类型.  Animal ...

  3. C# 学习笔记 多态(二)抽象类

    多态是类的三大特性之一,抽象类又是多态的实现方法之一.抽象类是什么呢,如果把虚方法比作一个盛有纯净水的杯子,那么此时的“纯净水”就是事先定义好的方法,我们可以根据不同的需求来改变杯子中所事先盛放的是“ ...

  4. C# 学习笔记 多态(一)虚方法

    在面对对象编程中,类的三大特性分别为封装,继承,多态.其中多态的具体实现,依赖于三个方法,也就是虚方法,抽象类和接口. 多态的具体作用是什么呢?或者说多态的存在有什么意义呢?多态的存在有效的降低了程序 ...

  5. C++学习笔记-多态

    多态作为面向对象的重要概念,在如何一门面向对象编程语言中都有着举足轻重的作用,学习多态,有助于更好地理多态的行为 多态性(Polymorphism)是指一个名字,多种语义:或界面相同,多种实现. 重载 ...

  6. C++学习笔记-多态的实现原理

    深入了解多态的实现原理,有助于提高对于多态的认识 多态基础 多态的实现效果 多态:同样的调用语句有多种不同的表现形态 多态实现的三个条件 有继承.有virtual重写.有父类指针(引用)指向子类对象 ...

  7. s2第二章深入c#类型

    S2第二章预习笔记  深入c# 数据类型 常用类型      java     c#     举例 整形          int     int     年龄 浮点型        float    ...

  8. Java基础进阶:内部类lambda重点摘要,详细讲解成员内部类,局部内部类,匿名内部类,Lambda表达式,Lambda表达式和匿名内部类的区别,附重难点,代码实现源码,课堂笔记,课后扩展及答案

    内部类lambda重点摘要 内部类特点: 内部类可以直接访问外部类,包括私有 外部类访问内部类必须创建对象 创建内部对象格式: 外部类.内部类 对象名=new外部类().new内部类(); 静态内部类 ...

  9. 寒假 OC-代理,类目,内存,协议,延展,数组,字典,集合

     OC04字符串博客:1.http://www.cnblogs.com/heyonggang/p/3452556.html (字符串常用方法)2.http://blog.sina.com.cn/s/b ...

随机推荐

  1. [转载]《民航科技》2012年4月专家论坛:罗喜伶《SWIM技术国际研究动态及对中国民航的借鉴意义》

    专家介绍:罗喜伶,北京航空航天大学电子信息工程学院副教授,工学博士,硕士生导师,国家空管新航行系统技术重点实验室和协同式网络化空中交通管理系统研究教育部创新团队核心成员,民航空管广域信息系统专家组成员 ...

  2. Openlayers简介

    OpenLayers 是由MetaCarta公司开发的,用于WebGIS客户端的 JavaScript包,目前的最高版本是2.5 V,通过BSD License 发行.它实现访问地理空间数据的方法都符 ...

  3. backup1

    string _imgpath1 = WebConfigurationManager.AppSettings["IMGPATH1"].ToString(); string outp ...

  4. 基于Python的函数回归算法验证

    看机器学习看到了回归函数,看了一半看不下去了,看到能用方差进行函数回归,又手痒痒了,自己推公式写代码验证: 常见的最小二乘法是一阶函数回归回归方法就是寻找方差的最小值y = kx + bxi, yiy ...

  5. bootstrap 无限极菜单

        <ul class='wraplist' >           <li class="open">                <a hr ...

  6. MongoDB(七)MongoDb数据结构

    首先,向数据库插入一条bjson数据 首先是定义文档,然后使用admin用户名密码登录,进入test数据库,向test数据库中插入此文档("表名称和表中的记录") 插入结果,查看m ...

  7. Windows程序设再读笔记00-序言

    最近打算重新读windows程序设计这本书,这是我第二次读这本书,上一次读已经是七八年前的事情了.当初读的时候,刚刚接触windows开发不久,很多东西都不能够完全理解.这几天重新读了几章,发现收获不 ...

  8. List集合的remove一个对象的方法

    import java.util.ArrayList;import java.util.List;class A{ public boolean equals(Object obj){ return ...

  9. Orcle学习(一)

    exists"和"in"的效率问题 1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ...

  10. <读书笔记> 代码整洁之道

    概述      1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...