多态

多态

1.1 开发工具

eclipse:www.eclipse.org

下载地址https://www.eclipse.org/downloads/packages/

 

IDEA:高级部分

 

1.1.1 配置智能提示


  

 

1.1.2 快捷键

快捷键

描述

ctrl+m

最大化/恢复编辑区

ctrl + +/-

放大/缩小字体

shift+alt+s

呼出source菜单

ctrl+alt+向上/

快速复制代码

ctrl+2,L

快速生成本地变量

alt+向上/

快速移动代码

ctrl+1

快速修复/建议代码

 

1.2 多态

软件设计原则—开闭原则

拓展开放,对修改关闭

 

为什么要使用多态?

系统进行业务拓展,增加系统的可维护性。

 

1.2.1 多态的概念

多态(?)

可以理解为多种状态/多种形态

 

一份文档,由于使用的打印机不同,产生的结果不同

 

同一事物,由于条件不同,产生的结果不同

 

程序中的多态

同一引用类型,使用不同的实例执行结果不同的。

:同一个类型,一般指父类。

不同:不同的子类实例

不同:针对同一方法执行的结果不同

package cn.sxt05;

 

public class Test01 {

public static void main(String[] args) {

 

// 多态

// 同一引用类型

Pet pet = null;

// 父类引用 引用 子类对象

pet = new Dog("二狗",100,0,"土狗");

// 呈现多态

pet.eat();

 

pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE);

// 呈现多态

pet.eat();

}

}

 

 

 

实现多态的步骤

[1] 编写父类

[2] 编写子类,子类一定要重写/实现父类的方法

[3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())

 

1.2.2 多态的实现形式

[1] 父类类型 引用 子类对象(本质)

// 多态

// 同一引用类型

Pet pet = null;

// 父类引用 引用 子类对象

pet = new Dog("二狗",100,0,"土狗");

// 呈现多态

pet.eat();

pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是子类对象重写/实现eat方法。

 

[2] 父类作为方法形参实现多态

public void feed(Pet pet) {

System.out.println(this.getName() + "正在喂" + pet.getName());

pet.eat();

}

 

[3] 父类作为方法的返回值实现多态

public Pet adoptPet(int type) {

Pet pet = null;

if(1 == type) {

pet = new Dog();

}else if(2 == type) {

pet = new Penguin();

}else if(3 == type){

pet = new Cat();

}

return pet;

}

 

1.3 类型转换

多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换

引用数据类型转换过程中,

自动类型转换也称向上类型转换。子类可以自动转换成父类。

Pet pet = null;

pet = new Dog();

 

强制类型转换也称下类型转换父类可以强制转换成子类。

子类类型 引用 = (子类)父类对象

一般而言,需要判断父类对象的真实类型instanceof关键字

 

obj instanceOf /接口 判断obj是否是类/接口的实例

public class TestInstanceOf {

public static void main(String[] args) {

Dog dog = new Dog();

System.out.println(dog instanceof Dog); //true

System.out.println(dog instanceof Pet); //true

System.out.println(dog instanceof Object); //true

}

}

 

 

如果要调用子类特有的方法,一定要强制类型转换,通过instanceof鉴别具体类型

public void play(Pet pet) {

if(pet instanceof Dog) {

Dog dog = (Dog) pet;

dog.catchFlyDisc();

}else if(pet instanceof Penguin) {

Penguin penguin = (Penguin) pet;

penguin.swimming();

}

}

 

1.4 调试技巧

step over:  单步调试,一次只执行一行代码

step into: 进入方法调试

step return: 返回/结束方法

:停止调试

 

 

作业

 

posted @ 2019-04-23 19:26  御云凌月  阅读(141)  评论(0编辑  收藏  举报