练习题-抽象类和接口

在画图软件中,可以画出不同大小或颜色的圆形、矩形等几何图形。几何图形之间有许多共同的特征,如它们可以是用某种颜色画出来的,可以是填充的或者不填充的。此外还有些不同的特征,比如,圆形都有半径,可以根据半径计算圆形的面积和周长,矩形都有宽和高,可以根据宽高来计算矩形的面积和周长。
1、编写Java程序。
(1)使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求:
①抽象、图形类中有属性画笔颜色、图形是否填充,有方法获取图形面积、获取图形周长等;
②使用构造方法为其成员属性赋初值;
③在每个派生类中都重写toString()方法,返回所有属性的信息;
④根据文字描述合理设计类的其他成员属性和方法。
(2)设计实现画板类,要求:
①画一个红色、无填充、长和宽分别为10.0与5.0的长方形;
②画一个绿色、有填充、半径为3.0的圆形;
③画一个黄色、无填充、边长为4.0的正方形;
④分别求三个对象的面积和周长,并将每个对象的所有属性信息打印到控制台。

2、基于上题背景,设计实现以下程序:
(1)设计Comparable接口,接口中设计compareTo()方法,用来比较对象。此方法的返回值类型设计为int类型。此方法接收一个参数,参数类型为图形类。
(2)在图形类中实现compareTo()方法,用来比较两个图形的面积大小。
(3)在测试类中,创建图形类的数组,数组中存放多个圆形、正方形、长方形对象,使用compareTo()方法找出数组中面积最大的图形。
提示:比较对象时,可以将compareTo()方法的返回值设置为1、0、-1,来代表比较结果,当前对象大、两者相等或者当前对象小。再次提醒,此题涉及的代码全部展示在此题的题号下,与上一题相独立。

抽象类接口
实现方式实现方式
因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。接口完全是抽象的。它根本不存在方法的实现
构造器构造器
抽象类可以有构造器接口不能有构造器
抽象方法可以有public、protected和default这些修饰符接口方法默认修饰符是public。你不可以使用其它修饰符。
main方法main方法
抽象方法可以有main方法并且我们可以运行它不能再main方法中运行
多继承多继承
抽象方法可以继承一个类和实现多个接口接口只可以继承一个或多个其它接口
速度速度
抽象类比接口速度要快接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。
/**
 * 
 *<p>Title:Figure</p>
 *<p>Description:抽象图形类</p>
 * @author 赖文卓
 * @date 2019年9月27日
 */
public abstract class Figure  implements Comparable{
	public abstract double area();//面积
	
	public abstract double Perimeter();//周长
	
	public int compareTo(Figure figure){
		if(this.area()>=figure.area()){
			if(this.area()==figure.area()){
				return 0;
			}else {
				return 1;
			}
		}else{
			return -1;
		}
	}

}

/**
 * 
 *<p>Title:Rectangle</p>
 *<p>Description:长方形类</p>
 * @author 赖文卓
 * @date 2019年9月27日
 */

public class Rectangle extends Figure {
	public double longs;
	public double wide;
	double areas=0;
	double perimeters=0;
	public Rectangle(double longs,double wide) {
		this.longs=longs;
		this.wide=wide;
	}
	public Rectangle(){
		
	}
	
	public double getLongs() {
		return longs;
	}

	public void setLongs(double longs) {
		this.longs = longs;
	}

	public double getWide() {
		return wide;
	}

	public void setWide(double wide) {
		this.wide = wide;
	}

	@Override
	public double area() {
		return areas=longs*wide;
		
	}
	@Override
	public double Perimeter() {
		return perimeters=2*(longs+wide);
		
	}
	public String toString(){
		return "长方形的面积为:"+(int)areas+"长方形的周长为:"+(int)perimeters;
	}
	@Override
	public int compareTo(Figure figure) {
		// TODO Auto-generated method stub
		return 0;
	}

}
/**
 * 
 *<p>Title:Round</p>
 *<p>Description:圆形类</p>
 * @author 赖文卓
 * @date 2019年9月27日
 */
public class Round extends Figure {
	public double radius;
	double areas=0;
	double perimeters=0;
    public Round(double radius) {
		this.radius=radius;
	}
    public Round() {
    	return;
	}

	public double getRadius() {
		return radius;
	}
	public void setRadius(double radius) {
		this.radius = radius;
	}
	@Override
	public double area() {
		return areas=Math.PI*radius*radius;
		
	}

	@Override
	public double Perimeter() {
		return perimeters=2*Math.PI*radius;
		
	}
	@Override
	public String toString() {
		return "圆的面积:"+(int)areas+"圆的周长:"+(int)perimeters;
	}
	@Override
	public int compareTo(Figure figure) {
		// TODO Auto-generated method stub
		return 0;
	}
	

}
/**
 * 
 *<p>Title:Square</p>
 *<p>Description:正方形类</p>
 * @author 赖文卓
 * @date 2019年9月27日
 */
public class Square extends Figure{
	public double side;
	double areas=0;
	double perimeters=0;
	public Square(double side) {
		this.side=side;
	}
	public Square() {
		
	}
	public double getSide() {
		return side;
	}
	public void setSide(double side) {
		this.side = side;
	}
	@Override
	public double area() {
		return areas=side*side;
		
	}
	@Override
	public double Perimeter() {
		return perimeters=4*side;
		
	}
	public String toString(){
		return "正方形的面积为:"+(int)areas+"正方形的周长为:"+(int)perimeters;
	}
	@Override
	public int compareTo(Figure figure) {
		// TODO Auto-generated method stub
		return 0;
	}

}
import java.util.Scanner;
/**
 * 
 *<p>Title:Palette</p>
 *<p>Description:绘画类</p>
 * @author 赖文卓
 * @date 2019年9月27日
 */
public class Palette {

	public static void main(String[] args) {
		Round round=new Round();//圆形
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入圆的半径:");
		round.setRadius(sc.nextDouble());
		round.area();
		round.Perimeter();
		System.out.println(round);
		Square square=new Square();//正方形
		System.out.println("请输入正方形的边长:");
		square.setSide(sc.nextDouble());
		square.area();
		square.Perimeter();
		System.out.println(square);//长方形
		Rectangle rectangle=new Rectangle();
		System.out.println("请输入长方形的长:");
		rectangle.setLongs(sc.nextDouble());
		System.out.println("请输入长方形的宽:");
		rectangle.setWide(sc.nextDouble());
		rectangle.area();
		rectangle.Perimeter();
		System.out.println(rectangle);
	}

}
/**
 * 
 *<p>Title:Comparable</p>
 *<p>Description:Comparable接口</p>
 * @author 赖文卓
 * @date 2019年9月26日
 */

public interface Comparable {
	
	public int compareTo(Figure figure);

}
/**
 * 
 *<p>Title:Main</p>
 *<p>Description:Main方法</p>
 * @author 赖文卓
 * @date 2019年9月27日
 */
public class Main {

	public static void main(String[] args) {
		Figure[] figures=new Figure[4];
		figures[0]=new Square(10);
		figures[1]=new Round(10);
//		figures[1]=new Square(10);
		figures[2]=new Rectangle(1, 1);
		
		Figure a=null;
		for(int i=0;i<figures.length;i++){
			if(i==0){
				a=figures[i];
			}else {
				
				if(a.compareTo(figures[i])==-1){
					a=figures[i];
				}
			}
			
		}
		System.out.println(a.area());
	}

}
### 关于抽象类接口练习题 以下是几个基于 Java 的抽象类接口的相关练习题: #### 题目一:员工管理系统 设计一个 `Employee` 基类,可以是一个抽象类接口。该基类应包含以下字段方法: - 字段:姓名 (`name`)、部门 (`department`) 基本工资 (`salary`)。 - 方法:显示基本信息的方法 `displayInfo()` 计算奖金的抽象方法 `calculateBonus()`。 创建两个具体的子类 `Manager` `Developer`,分别实现 `calculateBonus()` 方法来表示不同的奖金计算方式。最后通过测试程序展示不同员工的信息及其奖金[^3]。 ```java abstract class Employee { protected String name; protected String department; protected double salary; public Employee(String name, String department, double salary) { this.name = name; this.department = department; this.salary = salary; } public abstract void calculateBonus(); public void displayInfo() { System.out.printf("Name: %s, Department: %s, Salary: %.2f\n", name, department, salary); } } class Manager extends Employee { public Manager(String name, String department, double salary) { super(name, department, salary); } @Override public void calculateBonus() { double bonus = salary * 0.15; // 管理员有15%的奖金 System.out.printf("%s's Bonus is %.2f\n", name, bonus); } } class Developer extends Employee { public Developer(String name, String department, double salary) { super(name, department, salary); } @Override public void calculateBonus() { double bonus = salary * 0.10; // 开发者有10%的奖金 System.out.printf("%s's Bonus is %.2f\n", name, bonus); } } ``` --- #### 题目二:手机功能模拟 设计一个手机系统的模型,其中涉及普通手机智能手机的功能差异。使用抽象类接口完成此题目。 - 定义一个名为 `Phone` 的抽象类,具有品牌 (`brand`) 型号 (`model`) 属性以及发送短信的方法 `sendSMS()`。 - 创建一个接口 `SmartFeatures`,定义播放音乐的方法 `playMusic()` 拍照的方法 `takePhoto()`。 - 实现两个具体类 `BasicPhone` `Smartphone` 来扩展上述结构并提供各自的具体行为[^2]。 ```java abstract class Phone { private String brand; private String model; public Phone(String brand, String model) { this.brand = brand; this.model = model; } public abstract void sendSMS(); public void showDetails(){ System.out.println("Brand:" + brand+", Model:"+model); } } interface SmartFeatures{ void playMusic(); void takePhoto(); } class BasicPhone extends Phone{ public BasicPhone(String brand, String model){ super(brand,model); } @Override public void sendSMS() { System.out.println("Sending SMS..."); } } class Smartphone extends Phone implements SmartFeatures{ public Smartphone(String brand,String model){ super(brand,model); } @Override public void sendSMS() { System.out.println("Sending SMS with advanced features..."); } @Override public void playMusic() { System.out.println("Playing music..."); } @Override public void takePhoto() { System.out.println("Taking photo..."); } } ``` --- #### 题目三:动物声音模仿 构建一个简单的动物园系统,利用抽象类接口描述各种动物的行为特征。 - 使用抽象类 `Animal` 表示所有动物共有的特性(如名称年龄),并定义发声方法 `makeSound()`。 - 利用接口 `Swimable` 描述会游泳的动物的能力,并在某些特定动物中实现它。 - 提供至少两种具体动物类(如狗鱼)作为演示实例[^1]。 ```java abstract class Animal { protected String name; protected int age; public Animal(String name, int age) { this.name = name; this.age = age; } public abstract void makeSound(); } interface Swimable { void swim(); } class Dog extends Animal { public Dog(String name, int age) { super(name, age); } @Override public void makeSound() { System.out.println(this.name + " says woof!"); } } class Fish extends Animal implements Swimable { public Fish(String name, int age) { super(name, age); } @Override public void makeSound() { System.out.println(this.name + " makes bubbling sounds."); } @Override public void swim() { System.out.println(this.name + " swims gracefully."); } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值