第三章 多态

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. 问题解决_WCF_WCF 接收我服务的 HTTP 响应时发生错误

    原文地址:http://www.cnblogs.com/tianma3798/p/5470974.html 错误内容: System.ServiceModel.CommunicationExcepti ...

  2. Liunx 常用命令

    Liunx 常用命令================================================================================ 1. 远程拷贝文件 ...

  3. Openlayers简介

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

  4. 慕课网-Java入门第一季-6-8 使用 foreach 操作数组

    来源:http://www.imooc.com/code/1864 foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组.集合时, foreach 更简单便捷.从英 ...

  5. qt 环境下mapx组件的鼠标跟踪

    经过两天的研究mapx组件人坐标转换还是没有转换成功,因为不管怎么变,定点转换的经纬度坐标始终与期望的值有较大的偏差.最后还是想老大请教了一下,划了半天功夫就研究出来了(不愧是老大,仰慕之情犹如滔滔江 ...

  6. Have Fun with Numbers及循环链表(约瑟夫问题)

    1. 循环链表(约瑟夫问题) https://github.com/BodhiXing/Data_Structure 2. Have Fun with Numbers https://pta.pate ...

  7. 简单的java socket 示例

    一.搭建服务器端 a).创建ServerSocket对象绑定监听端口. b).通过accept()方法监听客户端的请求. c).建立连接后,通过输入输出流读取客户端发送的请求信息. d).通过输出流向 ...

  8. 关于IE下用HTTPS无法下载/打开文件

    关于IE下用HTTPS无法下载/打开文件(ie8兼容模式下,ie7/ie6下有些问题.) http协议下运行正常,可以下载文件但放到https协议下就不好用一保存,IE提示:ie无法下载,请求站点不可 ...

  9. CSS鼠标悬停图片加边框效果,不位移的方法

    <!DOCTYPE HTML> <html lang="en-US"> <head> <title>css实现鼠标悬停时图片加边框效 ...

  10. Tomcat回收连接

    最近公司一个JDK1.4的老项目升级了JDK1.6后BUG不断,最可恶的连接池被占满. 因为是使用tomcat的连接池所以在config下中添加 <Resource name="jdb ...