day2多态

day3:多态

day3多态 porlamorphic

一,继承类型的多态:

多态概述:

​ 一个事务有多种形态(身份).
​ 在Java中是指一个对象具有多个数据类型.

代码体现:

​ Java中多态的代码体现在一个子类对象(实现类对象)
​ 既可以给这个子类(实现类对象)引用变量赋值,
​ 又可以给这个子类(实现类对象)的父类(接口)变量赋值。
1,继承
​ 一个父类类型的引用,指向一个子类的对象(要求子类必须重写父类的方法)
​ 格式:
​ 父类名 对象名 = new 子类名(实参列表)
​ 对象名.重写的方法();

2,实现类
​ 一个接口类型的引用,指向一个实现类的对象(实现类必须实现那个接口);

​ 多态的好处:
​ 可以让方法变得更加通用,提高代码的重复使用.

​ 向上转型:
​ 当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。
​ 使用格式:
​ 父类类型 变量名 = new 子类类型();
​ 如:Animal p = new Cat()

​ 多态本身是子类类型向父类类型向上转型的过程(数据范围变大了)
​ 转型之后,只能调用父类中定义了并且在子类中重写后的方法.
​ 向下转型:
​ 一个已经向上转型的子类对象可以使用强制类型转换的格式,
​ 将父类引用转为子类引用,这个过程是向下转型。
​ 如果是直接创建父类对象,是无法向下转型的!(需要强制类型转换)

​ 格式:
​ 子类类型 变量名 = (子类类型) 父类类型的变量;
​ 如:Cat c = (Cat) a; //变量p 实际上指向Cat对象
​ 注意:

​ 强制类型转换是由风险的,尽量避免使用,
​ 为了避免出现类型转换异常,可以先判断对象是否为目标类型的对象

​ 判断一个对象是否为某种类型,使用instanceof,判断结果为boolean

二,接口类型的多态

​ 格式:
​ 接口名 对象名 = new 实现类(实参列表)
​ 要求:实现类必须实现接口
​ 实现类中必须实现接口定义的抽象方法.

​ 对象名.方法名(实参列表)
​ 要求:
​ 这里调用的方法必须时实现类实现过的方法,不能调用实现类中特有的方法

​ 好处:与继承相同

三,多态特点:
1,继承的形式:

​ 一个父类类型的引用,指向一个子类的对象(要求子类必须重写父类的方法)
​ 格式:
​ 父类名 对象名 = new 子类名(实参列表)
​ 对象名.重写的方法();(要求在父类中定义过,并且被子类重写的方法,不能调用子类特有方法)

2,接口的形式

​ 格式:
​ 接口名 对象名 = new 实现类(实参列表)
​ 要求:实现类必须实现接口
​ 实现类中必须实现接口定义的抽象方法.

​ 对象名.方法名(实参列表)
​ 要求:
​ 这里调用的方法必须时实现类实现过的方法,不能调用实现类中特有的方法

1.1 案例介绍

定义USB接口(具备开启功能、关闭功能),笔记本要使用USB设备,即笔记本在生产时需要预留可以插入USB设备的USB接口,即就是笔记本具备使用USB设备的功能,但具体是什么USB设备,笔记本并不关心,只要符合USB规格的设备都可以。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守USB规范,不然鼠标和键盘的生产出来无法使用

进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘

l USB接口,包含开启功能、关闭功能

l 笔记本类,包含运行功能、关机功能、使用USB设备功能

l 鼠标类,要符合USB接口

l 键盘类,要符合USB接口

1.2 案例需求分析

阶段一:

使用笔记本,笔记本有运行功能,需要笔记本对象来运行这个功能

阶段二:

想使用一个鼠标,又有一个功能使用鼠标,并多了一个鼠标对象。

阶段三:

还想使用一个键盘 ,又要多一个功能和一个对象

问题:每多一个功能就需要在笔记本对象中定义一个方法,不爽,程序扩展性极差。

降低鼠标、键盘等外围设备和笔记本电脑的耦合性。

实现代码步骤
l 定义鼠标、键盘,笔记本三者之间应该遵守的规则
interface USB {

​    void open();// 开启功能

 

​    void close();// 关闭功能

}

 

l  鼠标实现USB规则

class Mouse implements USB {

​    public void open() {

​        System.*out*.println("鼠标开启");

​    }

 

​    publicvoid close() {

​        System.*out*.println("鼠标关闭");

​    }

}

 

l  键盘实现USB规则

class KeyBoard implements USB {

​    publicvoid open() {

​        System.*out*.println("键盘开启");

​    }

 

​    publicvoid close() {

​        System.*out*.println("键盘关闭");

​    }

}

 

l  定义笔记本

class NoteBook {

​    // 笔记本开启运行功能

​    public void run() {

​        System.*out*.println("笔记本运行");

​    }

 

​    // 笔记本使用usb设备,这时当笔记本对象调用这个功能时,必须给其传递一个符合USB规则的USB设备

​    public void useUSB(USB usb) {

​        // 判断是否有USB设备

​        if (usb != null) {

​            usb.open();

​            usb.close();

​        }

​    }

 

​    public void shutDown() {

​        System.*out*.println("笔记本关闭");

​    }

}

 

public class Test {

​    publicstaticvoid main(String[] args) {

​        // 创建笔记本实体对象

​        NoteBook nb = new NoteBook();

// 笔记本开启

​        nb.run();

​        // 创建鼠标实体对象

​        Mouse m = new Mouse();

​        // 笔记本使用鼠标

​        nb.useUSB(m);


// 创建键盘实体对象

​        KeyBoard kb = new KeyBoard();

​        // 笔记本使用键盘

​        nb.useUSB(kb);

 

​        // 笔记本关闭

​        nb.shutDown();

​    }

}
三,static关键字

​ 静态修饰符,一般用来修饰类的成员,被static修饰的成员属于类,不属于单个这个类的某个对象
static修饰的成员被多个对象共享.
static修饰的成员属于类,但是会影响每一个对象。

​ static修饰后成员的使用:被static修饰的成员可以并且建议通过类名直接访问
格式:
​ 类名.静态成员变量名
​ 类名.静态成员方法名(参数)












}




#### 三,static关键字

​	静态修饰符,一般用来修饰类的成员,被static修饰的成员属于类,不属于单个这个类的某个对象
static修饰的成员被多个对象共享.
static修饰的成员属于类,但是会影响每一个对象。

​	static修饰后成员的使用:被static修饰的成员可以并且建议通过类名直接访问
格式:
​	类名.静态成员变量名
​	类名.静态成员方法名(参数)


​			
​			
​			
​			
​			
​			
​			
​			
​			
​			
​			
​			
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值