Java——多态与接口
1.设计一个排序类IntSort,该类中包含3个同名的方法sort,分别完成2个整型数、3个整型数以及整型数组(10个数)的排序。编写测试类完成方法的验证。
实验程序:
package Test;public class IntSort {public void sort(int a,int b){System.out.println("两个整数排序的结果:");if(a>b){System.out.println(b+"<"+a);}else{System.out.println(a+"<"+b);} }public void sort(int a,int b,int c){System.out.println("三个整数排序的结果:");if (a>b){if(c>a){System.out.println(b+"<"+a+"<"+c);}else if(c<b){System.out.println(c+"<"+b+"<"+a);}else{System.out.println(b+"<"+c+"<"+a);}}else {if(c<a){System.out.println(c+"<"+a+"<"+b);}else if(c>b){System.out.println(a+"<"+b+"<"+c);}else{System.out.println(a+"<"+c+"<"+b);}}}public void sort(int[] array){for(int i=1;i<array.length;i++){for(int j=0;j<array.length-i;j++){if(array[j]>array[j+1]){int temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}}showArray( array);}public void showArray(int[] array){System.out.println("整形数组排序结果:");System.out.println("升序:");for(int i=0;i<array.length;i++){System.out.println(array[i]+" ");}}public static void main(String args[]){IntSort i=new IntSort();i.sort(10, 20);i.sort(2, 8, 4);int[] array={21,36,58,256,12,9};i.sort(array);}
}
实验结果:
- 高考入学考试课程为三门,每门满分为100分。在高考招生时,大学录取规则为取最低分数线是180分,而重点大学重写录取规则为录取最低分数线是220分。试利用多态中方法的覆盖实现该功能。测试类和上面的两个类(父类、子类)分开。(类继承)
实验程序:
(1) University类
package Test;public class University {void enterRule(double math,double english,double chinese){double total=math+english+chinese;if(total>=180)System.out.println(total+"分数达到大学录取分数线");elseSystem.out.println(total+"分数未达到大学录取分数线");}
}
(2) ImportantUniversity类
package Test;
public class ImportantUniversity extends University{void enterRule(double math,double english,double chinese){double total=math+english+chinese;if(total>=220)System.out.println(total+"分数达到大学录取分数线");elseSystem.out.println(total+"分数未达到大学录取分数线");}
}
(3)测试类
package Test;public class Test {public static void main(String[] args){double math=92,english=86,chinese=75;ImportantUniversity iun=new ImportantUniversity();iun.enterRule(math, english, chinese);math=68;english=60;chinese=76;iun.enterRule(math,english,chinese);}
}
实验结果:
3. 定义一个接口Shape2D,使用该接口实现二维几何图形类Circle(圆形)和Rectangle(矩形)面积的计算,编写实现接口的类文件以及测试类文件。(接口和两个实现,注意用向上转型)
实验程序:
(1)Shap2D接口
package Test;interface Shap2D {public void draw();
}
(2) Circle类
package Test;public class Circle {float r;final double pi=3.1415927;public Circle(float r){this.r=r;}public void draw(){double s=pi*r*r;System.out.println("圆的面积:"+s);}
}
(3) Rectangle类
package Test;public class Rectangle {float a,b;public Rectangle(float a,float b){this.a=a;this.b=b;}public void draw(){float s=a*b;System.out.println("矩形面积:"+s);}
}
(4)测试类
Package Test;public class Figure {public static void main(String[] args){Circle c=new Circle(5);Rectangle r=new Rectangle(2, 5);c.draw();r.draw();}
}
实验结果:
4.使用多态编程解决如下问题:一个主人养了猫和狗,猫和狗都有自己爱吃的东西,主人在喂它们的时候,如果先判断是猫还是狗,再判断他们分别爱吃什么,就显得很麻烦。如果主人养了很多种动物,这样的重复判断,就会浪费很多时间。有什么办法,能让主人拿到一种食物就知道这是哪种动物的,就好了。(接口,向上转型)
实验程序:
(1)动物类
package Test;public class Animal {int age;String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}// 动物类里面有叫和吃两个方法public void cry() {System.out.println("我不知道叫什么");}public void eat() {System.out.println("我不知道吃什么");}
}
(2)狗类
package Test;class Dog extends Animal {// 覆盖(重写)方法public void cry() {System.out.println("旺旺");}public void eat() {System.out.println("我是狗,我爱吃骨头");}
}
(3)猫类
package Test;class Cat extends Animal {// 覆盖(重写)方法public void cry() {System.out.println("喵喵");}public void eat() {System.out.println("我是猫,我爱吃鱼");}
}
(4)食物类
Package Test;class Food {String name;public String getName() {return name;}public void setName(String name) {this.name = name;}// 食物类里面让它有一个方法public void showName() {}
}
(5)鱼类
package Test;class Fish extends Food {public void showName() {System.out.println("食物:鱼");}
}
(6)骨头类
package Test;class Bone extends Food {public void showName() {System.out.println("食物:骨头");}
}
(7)主人类
Package Test;class Master {// 给动物喂食物,如果没有多态,他要写给猫喂食和给狗喂食两个方法// 有了多态,以后即使再来好多动物,用这一个函数就可以了public void feed(Animal an, Food f) {an.eat();f.showName();}
}
(8)测试类
package Test;public class DuoTaiDemo {public static void main(String args[]) {Master master = new Master();master.feed(new Dog(), new Bone());// hin方便,可以再试试master.feed(new Cat(), new Fish());}
}
实验结果:
5.定义一组交通工具类,包括汽车类(AutoMobile)、飞机类(Plane)、船类(Ship),其中汽车类有坦克(Tank)、卡车(Truck)、小汽车(Car),飞机类有客机(AirLiner)、战斗机(FighterPlane),船类有子类游艇(Yacht)、军舰(WarShip),坦克、战斗机和军舰都具有攻击的功能,抽象并定义这些类,通过抽象类和接口以及对应的实现类实现多态和这些类的测试。
实验程序:
(1)火车类
package Test;public interface Fire {void fire();
}
(2)汽车类
package Test;public abstract class AutoMobile {public AutoMobile() {System.out.println("AutoMobile无参构造函数已构建");}
}
(3)坦克类
package Test;public class Tank extends AutoMobile{public Tank() {}
}
(4)卡车类
package Test;
public class Truck extends AutoMobile implements Fire{String name=null;public Truck(String str) {System.out.println("Truck有参构造函数已构建");name=str;}@Overridepublic void fire() {System.out.println(name+"攻击方式:"+"piupiu~~");}
}
(5)小汽车类
package Test;public class Car extends AutoMobile{public Car() {}
}
(6)飞机类
package Test;public abstract class Plane {public Plane() {System.out.println("Plane无参构造函数已构建");}
}
(7)客机类
package Test;public class AirLine extends Plane {public AirLine() {}
}
(8)战斗机
package Test;public class FighterPlane extends Plane implements Fire{String name;public FighterPlane(String str) {System.out.println("FighterPlane有参构造函数已构建");name=str;}@Overridepublic void fire() {System.out.println(name+"攻击:"+"xiuxiu~~");}
}
(9)轮船类
package Test;
public class Ship {public Ship() {System.out.println("Ship无参构造函数已构建");}
}
(10)游艇类
package Test;public class Yacht extends Ship{public Yacht() {}
}
(11)军舰类
package Test;public class WarShip extends Ship implements Fire{String name=null;public WarShip(String str) {System.out.println("WarShip有参构造函数已构建");name=str;}@Overridepublic void fire() {System.out.println(name+"攻击方式:"+"嗵嗵~~");}
}
(12)测试类
package Test;public class Test {public static void main(String[] args) {Fire truck= new Truck("中国99坦克");Fire fighterPlane=new FighterPlane("歼-10");Fire warship=new WarShip("俄罗斯的“1144”型巡洋舰");truck.fire();fighterPlane.fire();warship.fire();}
实验结果:
Java——多态与接口相关推荐
- JAVA多态/封装/接口/包/包的命名规则——java面向对象
Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态的优点 消除类型之间的耦合关系 可替换性 可扩充性 接口性 灵活性 简化性 多态存在的三个必要条件 继承 重写 父类引用指向子类 ...
- java 多态,接口,抽象类的认识
1, 多态 : 父类的引用指向子类对象,有继承,有重写 多态表达了 : cat 是一种 Animal 规则 : 多态对象不能调用父类中没有的方法 定义 : Animal cat = new C ...
- Java 多态,接口
package traffic;public class traffictool {public void go() {System.out.println(); ///子类将重写之,不能省去 } / ...
- 类与接口(五)java多态、方法重写、隐藏
一.Java多态性 面向对象的三大特性:封装.继承.多态. 多态的类型,分为以下两种: 编译时多态: 指的是 方法重载.编译时多态是在编译时确定调用处选择那个重载方法,所以也叫 静态多态,算不上真正的 ...
- 【java学习之路】(java SE篇)(讨论与思考)关于继承,封装,多态,接口的简单实现与思考
题目一 编写一个Person抽象类,要求含有姓名(name)年龄(age)两个私有属性以及吃饭(eat) 和睡觉(sleep)两个抽象方法, 并写出带参构造方法,创建学生(student)和工人(wo ...
- 【Java程序设计】接口与多态
接口与多态 文章目录 接口与多态 一.接口 (1)接口概述 1.接口与类相似点: 2.接口与类的区别: 3.接口特性 4.抽象类和接口的区别 5.接口的作用 (2)接口的声明 (3)接口的实现 (4) ...
- 【Java】继承、多态、接口
Java中的继承.多态和接口 1.用类比引入继承概念 众所周知,Java是一门面向对象的语言.如果我们要设计多种多样的交通工具,比如汽车.火车.飞机,虽然这些工具功能不同.形态不同,但是他们很多的基本 ...
- Java学习 day11 (继承与多态)接口、多态
前言: 前天我们学习了继承,子类可以在父类的基础上重写父类内容,这样很容易误伤很多固定用法,已经写好的类,为了避免这种情况,java提供了final关键字,用来修饰不可改变内容. 我的理解是,类似于我 ...
- 面试轻松讲清楚 Java 面向对象的问题与知识(类与对象,封装,继承,多态,接口,内部类...)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
最新文章
- 在内核中添加系统调用
- tf.reduce_max用法
- jQuery获取URL的GET参数值
- Kafka 消费者组 Rebalance 详解
- Python新手学习基础之数据结构-序列2
- jenkins source files 和 Remove Prefix 用户
- oracle游标fetch_SQL游标@@ FETCH_STATUS函数概述
- 尝试加载Crystal Reports 运行时时出错
- 计算机基础知识测试1,计算机基础知识测试试题及答案(网络)1
- proteus不能打开一直在开启界面转圈
- apue第三版P106:ftw程序中使用的path_alloc
- P5.js码绘---阿珊自画像
- 手机显示屏LCDTP的不同贴合工艺
- 数据通信与计算机网络课后习题
- 超炮主题曲用计算机谱,fripsideLevel5 Judgelight(《某科学的超电磁炮》动漫主题曲)歌词-查字典简谱网...
- Long类型数据比较
- win7电脑怎么提升开机速度?
- ps怎么修改图片上的数字(适用于图片上已有的数字)
- 模式识别学习笔记——第2章—2.4 两类错误率、Neyman-Pearson决策与ROC曲线
- 论文笔记:Densely Connected Convolutional Networks (2017 CVPR)