继承,接口,多态的综合练习
来源:互联网 发布:学会计的软件 编辑:程序博客网 时间:2024/05/29 00:33
"世界万物皆有接口",今天看到这句话瞬间感觉在没接触IT之前的世界观有问题,哈哈
今天介绍一个用到了继承,接口,多态的综合例题,思路不难,综合性比较强,适合新手练习用.
考核知识点
继承
接口
类实现接口
多态(向上转型)
向下转型
例题描述
请使用代码描述:
奥迪车(Audi)都具有跑的功能,但是智能奥迪车(SmartAudi)除了具有跑的功能外,还具有自动泊车(automaticParking)和无人驾驶(automaticDrive)的功能!
要求:在测试类中创建Audi车对象和智能奥迪车对象,分别调用各自方法; 然后测试向上转型(转换为父类类型和实现的接口类型)和向下转型.
代码描述
请使用代码描述:
奥迪车(Audi)都具有跑的功能,但是智能奥迪车(SmartAudi)除了具有跑的功能外,还具有自动泊车(automaticParking)和无人驾驶(automaticDrive)的功能!
要求:在测试类中创建Audi车对象和智能奥迪车对象,分别调用各自方法; 然后测试向上转型(转换为父类类型和实现的接口类型)和向下转型.
操作步骤描述
定义奥迪车类(Audi)
成员方法: 跑(run())
输出格式: 奥迪车在跑
定义智能接口(Smart)
抽象方法: 自动泊车(automaticParking)和无人驾驶(automaticDrive)
定义智能奥迪车类(SmartAudi) 继承Audi实现Smart接口
成员方法
实现automaticParking方法
输出:智能奥迪车在自动泊车
实现automaticDrive方法
输出:智能奥迪车在无人驾驶
定义测试类Test
提供main方法
在main方法中
创建Audi车对象 a,调用跑方法
创建SmartAudi车对象 sa,调用跑,自动泊车,自动驾驶方法
定义Audi类型的变量 aa 把sa赋值aa; 测试aa只能调用run方法,不能调用其他方法
判断如果aa是SmartAudi的实例对象, 把aa强制转换为saa;使用saa调用自动泊车和自动驾驶方法
定义Smart类型的变量 s,把sa赋值给s,测试只能调用自动泊车和自动驾驶方法,不能调用run方法.
/*
定义奥迪车类(Audi)
成员方法: 跑(run())
输出格式: 奥迪车在跑
*/
publicclass Audi {
// 成员方法: 跑(run())
// 输出格式: 奥迪车在跑
publicvoid run(){
System.out.println("奥迪车在跑");
}
}
/*
定义智能接口(Smart)
抽象方法: 自动泊车(automaticParking)和无人驾驶(automaticDrive)
*/
publicinterface Smart {
// 自动泊车(automaticParking)
publicabstractvoid automaticParking();
// 无人驾驶(automaticDrive)
publicabstractvoid automaticDrive();
}
/*
定义智能奥迪车类(SmartAudi) 继承Audi实现Smart接口
成员方法
实现automaticParking方法
输出:智能奥迪车在自动泊车
实现automaticDrive方法
输出:智能奥迪车在无人驾驶
*/
publicclass SmartAudiextends Audiimplements Smart {
// 实现automaticParking方法
publicvoid automaticParking() {
System.out.println("智能奥迪车在自动泊车");
}
// 实现automaticDrive方法
publicvoid automaticDrive() {
System.out.println("智能奥迪车在自动驾驶");
}
}
/*
定义测试类Test
提供main方法
在main方法中
创建Audi车对象 a,调用跑方法
创建SmartAudi车对象sa,调用跑,自动泊车,自动驾驶方法
定义Audi类型的变量aa 把sa赋值aa; 测试aa只能调用run方法,不能调用其他方法
判断如果aa是SmartAudi的实例对象, 把aa强制转换为saa;使用saa调用自动泊车和自动驾驶方法
定义Smart类型的变量 s,把sa赋值给s,测试只能调用自动泊车和自动驾驶方法,不能调用run方法.
*/
publicclass Test {
publicstaticvoid main(String[]args) {
// 创建Audi车对象 a,调用跑方法
Audia = new Audi();
a.run();
// 创建SmartAudi车对象sa,调用跑,自动泊车,自动驾驶方法
SmartAudisa = new SmartAudi();
sa.run();
sa.automaticParking();
sa.automaticDrive();
// 定义Audi类型的变量aa 把sa赋值aa; 测试aa只能调用run方法,不能调用其他方法
Audiaa = sa;
aa.run();
// aa.automaticParking();编译报错
// aa.automaticDrive(); 编译报错
// 判断如果aa是SmartAudi的实例对象, 把aa强制转换为saa;使用saa调用自动泊车和自动驾驶方法
if(aainstanceof SmartAudi){
SmartAudisaa = (SmartAudi) aa;
saa.automaticParking();
saa.automaticDrive();
}
// 定义Smart类型的变量 s,把sa赋值给s,测试只能调用自动泊车和自动驾驶方法,不能调用run方法.
Smarts = sa;
s.automaticDrive();
s.automaticParking();
// s.run();编译报错
}
}
==========================================\
这里面提到了向上转型和向下转型,介绍一下这两种类转型的格式和一些注意事项
java中类的转型可以分成两种:
1. 向上转型, 格式: 父类类型 变量名 = 子类对象;
或者: 接口类型 变量名 = 实现类对象;
2. 向下转型,格式: 子类类型 变量名 = (子类类型)父类变量名;
如果避免类型转换异常呢?
需要使用到关键字:instanceof
使用格式:
boolean b = 对象A instanceof 类A;
解释: 判断对象A是否是类A的一个实例(对象)
解决问题: 避免类型转换异常
- 继承,接口,多态的综合练习
- 接口、抽象类、封装、继承、多态的综合案例
- java接口、继承、多态的综合应用
- 继承、接口的练习
- 继承,接口,多态练习java
- 1001 Java 类、抽象类、接口的综合小练习
- 027、类,抽象类,接口的综合小练习
- 继承+多态练习
- dom的综合练习
- 类的综合练习
- 接口的多继承
- 抽象类,接口,多态的综合运用
- 习题--抽象类、继承、接口综合
- 接口多态继承
- BREW接口的继承和多态
- BREW接口的继承和多态
- BREW接口的继承和多态
- 【c#】接口、继承、多态、接口的多态
- Webstorm常用快捷键
- Oracle编程基础的东西
- python设计模式之享元模式
- Spring启动过程分析(一)
- 拦截过滤器模式
- 继承,接口,多态的综合练习
- Spring Security
- Webrtc服务器搭建(基于局域网环境)
- 我所知道的全球云计算服务商哪家最好
- java从小白到架构师大牛必看书籍
- 算法面试之剑指offer篇(二)
- HDU1061 快速慕水题
- 头条校招
- spring 启动过程分析(二)