多态

1.多态

多态的理解:

生活例子

同一份文档,使用不同的打印机,打印的结果不同

同一事物,由于条件不同,结果也不同

程序中:同一引用类型既父类,不同的子类实例,同一方法,不同条件,不同结果。

 1 package cn.sxt05;
 2 
 3 public class Test01 {
 4     public static void main(String[] args) {
 5         
 6         // 多态
 7         // 同一引用类型
 8         Pet pet = null;
 9         // 父类引用 引用 子类对象
10         pet = new Dog("二狗",100,0,"土狗");
11         // 呈现多态
12         pet.eat();
13         
14         pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE);
15         // 呈现多态
16         pet.eat();
17     }
18 }

实现多态的步骤

[1] 编写父类

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

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

 多态的实现形式

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

1 // 多态
2 // 同一引用类型
3 Pet pet = null;
4 // 父类引用 引用 子类对象
5 pet = new Dog("二狗",100,0,"土狗");
6 // 呈现多态
7 pet.eat();

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

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

1 public void feed(Pet pet) {
2         System.out.println(this.getName() + "正在喂" + pet.getName());
3         pet.eat();
4     }

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

 1     public Pet adoptPet(int type) {
 2         Pet pet = null;
 3         if(1 == type) {
 4             pet = new Dog();
 5         }else if(2 == type) {
 6             pet = new Penguin();
 7         }else if(3 == type){
 8             pet = new Cat();
 9         }
10         return pet;
11     }

 类型转换

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

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

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

1 Pet pet = null;
2 pet = new Dog();

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

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

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

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

1 public class TestInstanceOf {
2     public static void main(String[] args) {
3         Dog dog = new Dog();
4         System.out.println(dog instanceof Dog); //true
5         System.out.println(dog instanceof Pet); //true
6         System.out.println(dog instanceof Object); //true
7     }
8 }

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

1     public void play(Pet pet) {
2         if(pet instanceof Dog) {
3             Dog dog = (Dog) pet;
4             dog.catchFlyDisc();
5         }else if(pet instanceof Penguin) {
6             Penguin penguin = (Penguin) pet;
7             penguin.swimming();
8         }
9     }

 开发工具

eclipse:www.eclipse.org

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

 调试技巧

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

step into: 进入方法调试

step return: 返回/结束方法

:停止调试

  快捷键

快捷键

描述

ctrl+m

最大化/恢复编辑区

ctrl + +/-

放大/缩小字体

shift+alt+s

呼出source菜单

ctrl+alt+向上/

快速复制代码

ctrl+2,L

快速生成本地变量

alt+向上/

快速移动代码

ctrl+1

快速修复/建议代码

原文地址:https://www.cnblogs.com/xfbb/p/10759284.html