第三章 多态

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. 前后台读取Web.config中的值的方法

    webconfig <configuration> <appSettings> <add key="Workflow_Url" value=" ...

  2. 获取Finacial dimension value的description 值

    public static Description findDimensionValueDescription(DimensionValue _dimensionValue, Name _dimens ...

  3. OpenGL学习笔记2——顶点数组

    #pragma comment(lib,"glut32.lib") #pragma comment(lib,"glut.lib") #pragma commen ...

  4. 规则引擎集成接口(九)Java类对象

    Java类对象 右键点击“对象库” —“添加java类对象”,如下图: 弹出窗体,在文本框中输入类的全名“com.flagleader.test.Test”,选择该类型后确定,如下: 显示如下,勾选上 ...

  5. AE开发示例之RunGPAsync

    using System; using System.Collections.Generic;using System.ComponentModel;using System.Data;using S ...

  6. ssh那些事儿

    第一次使用ssh是上学期搭建hadoop集群的时候,当时照着各种配置文档费了九牛二虎之力终于把环境搭建成功,现在想想当时还真是不容易呢.好了废话不扯了,进入正题. 计算机发展早期能实现两台机器之间的通 ...

  7. Linux系统下如何查看已经登录用户

    查看用户的操作 系统管理员若想知道某一时刻用户的行为,只需要输入命令W 即可,在SHELL终端中输入如下命令: [ROOT@LOCALHOST ROOT] # W 2:31PM UP 11 DAY , ...

  8. NET 强签名

    强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名 ...

  9. Debian7下初次尝试Nginx+Uwsgi部署Django开发环境

    之前一直都用的是新浪的SAE,但是由于各种限制,各种不爽,终于下定决心开始折腾VPS,于是在搬瓦工上买了个年付VPS,开始折腾之旅. 由于对Linux一窍不通,所以不知道如何在Linux上部署开发环境 ...

  10. JS学习知我见(常用建站代码)

    <!doctype html><html><head><meta charset="utf-8"><meta name=&qu ...