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);
	}
}

实验结果:
在这里插入图片描述

  1. 高考入学考试课程为三门,每门满分为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+"分数达到大学录取分数线");
       else
    	   System.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+"分数达到大学录取分数线");
		else
			System.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;
    }

    @Override
    public 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;
    }
    @Override
    public 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;
    }

    @Override
    public 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();
    }

实验结果:
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别捏我的婴儿肥☼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值