继承,接口,多态的综合练习

来源:互联网 发布:学会计的软件 编辑:程序博客网 时间: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类型的变量aasa赋值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类型的变量aasa赋值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的一个实例(对象)

 解决问题: 避免类型转换异常



 

 

 

 



原创粉丝点击