预习笔记 多态 --S2 4.3

第三章 多态

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 的第二个参数所指定的类或接口在继承树上有上下级关系,否则会编译报错

}

时间: 2024-07-29 05:46:24

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

java学习笔记-多态

个人对多态的一点理解,不一定完全正确,欢迎大家批评指正. 1.什么是多态 面向对象的三大特性:封装,继承,多态.从某种程度来说,多态是建立在封装和继承的继承之上的. 多态性可以理解为同一个事物的多种表现形态. 1)方法的重载与重写   2)子类对象的多态性:父类的引用指向子类对象(更多的是指这种形式)              父类 f = new 子类(); 2.子类对象的多态性使用要求: 1)要有类的继承  2)要有子类对父类方法的重写 3)父类的引用指向资料对象 3.属性没有多态性 下面用

20-黑马程序员------OC 语言学习笔记---多态

多态 1.没有继承就没有多态 2.代码的体现:父类类型的指针指向子类对象 3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类.子类对象 4.局限性: 1> 父类类型的变量 不能 直接调用子类特有的方法.必须强转为子类类型变量后,才能直接调用子类特有的方法 @interface Animal : NSObject - (void)eat; @end @implementation Animal - (void)eat { NSLog(@"Animal-吃东西----");

Java学习笔记—多态

1.什么是多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现. 现实中,比如我们按下 F1 键这个动作: 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档: 如果当前在 Word 下弹出的就是 Word 帮助: 在 Windows 下弹出的就是 Windows 帮助和支持. 同一个事件发生在不同的对象上会产生不同的结果. 2.多态存在的三个必要条件 继承 重写 父类引用指向子类对象(Parent p = new Child()) 当使用多态方式

c++复习笔记--多态

多态 1 概念 面向对象系统的多态性是指不同的对象收到相同的的消息时, 执行不同的操作 编译时的多态性 多态性 运行时的多态性 编译时多态性主要是通过函数重载和运算符重载实现的. 运行时多态性主要是通过虚函数来实现的. 注 在C++中规定: 基类的对象指针可以指向它的公有派生的对象,但是当其指向公有派生类对象时, 它只能访问派生类中从基类继承来的成员,而不能访问公有派生类中定义的成员 例如 #include<iostream.h>    //例6.1-1 虚函数引例 class base {

三相异步电动机预习笔记

三相异步电动机的基本结构 三相异步电动机主要由定子和转子两个部分组成,定子静止不动但是提供可以旋转的磁场.转子与直流电动机中的转子功能相同,把能量转换为电机转矩输出. 三相异步电动机的旋转磁场 从最简单的每相绕组只有一个线匝开始理解.当三相电源的电压传递到绕组的端点,各个线匝的磁场相互影响,最终等效为一个特定方向的磁场.由于每匝线圈的电流不恒定,因此等效的磁场方向也在随时变化.这样就产生了旋转的磁场. 欲改变电动机的旋转方向,只需要把定子绕组接到电源的三根导线中任意两根对调. 当旋转磁场中有多对

m20预习笔记整理--linux基础知识

程序由指令+数据组成    高级语言--编译器--汇编语言--编译器--机器语言    linux指的是GUN tools+linux内核 系统结构    硬件        内核(内核隐藏了硬件特性,将计算机的计算能力抽象提供给应用程序使用)            应用程序(基于内核的systemcal实现的程序)            shell(也是应用程序)            库函数(.a或.so----是程序,但是没有执行入口,只能被调用)                应用程序,

m20预习笔记整理--bash特性

命令引用    $(command)    `command`    `` 反引号  ~符号键    [[email protected] ~]# mkdir `date +%H-%M-%S`    [[email protected] ~]# mkdir $(date +%H-%M-%S) 命令行展开    ~自动展开为用户的家目录,或指定用户的家目录(管理员可以)    {}可以承载一个以逗号分隔的路径列表,并能够将其展开为多个路径        [[email protected] ~]#

m20预习笔记整理--linux任务计划

周期性执行任务    1.未来的某时间执行一次某任务 at.batch    2.周期性运行某任务crontab 执行结果:会通过邮件发送给用户邮件:    1只用于本机的邮件服务    2本机用户之间传递邮件    /var/spool/mail/username    注:不同于互联网的电子邮件,仅本机用户之间发送邮件        cenos5,6,7默认邮件功能都是开启的 检测邮件功能是否开启    ss -tnl    netstat -tnl    25号端口为服务端口处于监听状态 

m20预习笔记整理--正则表达式及find

文本处理工具linux文本处理三剑客    grp:文本过滤工具(模式:pattern)    sed:文本编辑器--流编辑器    awk:linux上的实习为gawk,文本报告生成器(格式化文本) 三个工具都会用到正则表达式 Regual Expression    由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字面意义,而是用于控制或通配的功能分类    基本正则表达式    扩展正则表达式        二者区别元字符不同grep:global search regular e