java中抽象类和接口的使用
一、使用继承机制,分别设计实现抽象基类图形类,派生类圆形类、正方形类、长方形类,要求:
- 抽象图形类中有属性画笔颜色、图形是否填充,有方法获取图形面积、获取图形周长等;
- 在每个派生类中都重写toString()方法,返回所有属性的信息;
- 分别求三个对象的面积和周长,并将每个对象的所有属性信息打印到控制台。
package job1;
/**
* 图形抽象类
* @author bsf
*/
public abstract class graphical implements comparable{
public String color;
public String fill;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getFill() {
return fill;
}
public void setFill(String fill) {
this.fill = fill;
}
public abstract double perimeter ();
public abstract double area();
public int compareTo(graphical graphical) {
int i=0;
if(this.area()>graphical.area()){
return i=1;
}else if (this.area()<graphical.area()) {
return i=-1;
}else if (this.area()==graphical.area()) {
return i=0;
}
return i;
}
}
package job1;
/**
* 圆形类继承自抽象类图形类
* @author bsf
*/
public class circular extends graphical {
public int radius;
public String toString() {
return "circular [radius=" + radius + ", color=" + color + ", fill=" + fill + "]";
}
public circular(int radius){
this.radius=radius;
}
public int getRadius() {
return radius;
}
public void setRadius(int radius) {
this.radius = radius;
}
//计算圆形周长
public double perimeter() {
return 2*3.14*radius;
}
//计算圆形的面积
public double area() {
return 3.14*radius*radius;
}
public int compareTo(graphical graphical) {
return 0;
}
}
package job1;
/**
* 长方形类继承自抽象类图形类
* @author bsf
*/
public class rectangle extends graphical{
public int height;
public int width;
public rectangle(int width,int height){
this.height=height;
this.width=width;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public double perimeter() {
return 2*(height+width);
}
public double area() {
return height*width;
}
public String toString() {
return "rectangle [height=" + height + ", width=" + width + ", color=" + color + ", fill=" + fill + "]";
}
public int compareTo(graphical graphical) {
return 0;
}
}
package job1;
/**
* 正方形类继承自抽象类图形类
* @author bsf
*/
public class square extends graphical{
public int width;
public String toString() {
return "square [width=" + width + ", color=" + color + ", fill=" + fill + "]";
}
public square(int width){
this.width=width;
}
public int getWidth() {
return width;
}
public void setWidth(int width) {
this.width = width;
}
public double perimeter() {
return 4*width;
}
public double area() {
return width*width;
}
public int compareTo(graphical graphical) {
return 0;
}
}
package job1;
/**
1. 测试类
2. @author bsf
*/
public class test {
public static void main(String[] args) {
graphical circular=new circular(3);
graphical rectangle=new rectangle(3,5);
graphical square =new square(5);
circular.setColor("red");
circular.setFill("N");
rectangle.setColor("green");
rectangle.setFill("Y");
square.setColor("yellow");
square.setFill("N");
System.out.println(circular.toString());
System.out.println(rectangle.toString());
System.out.println(square.toString());
System.out.println("圆形的周长为:"+circular.perimeter());
System.out.println("圆形的面积为:"+circular.area());
System.out.println("长方形的周长为:"+rectangle.perimeter());
System.out.println("长方形的面积为:"+rectangle.area());
System.out.println("正方形的周长为:"+square.perimeter());
System.out.println("正方形的面积为:"+square.area());
}
}
运行结果
二、基于上题背景,设计实现以下程序:
- 设计Comparable接口,接口中设计compareTo()方法,用来比较对象。此方法的返回值类型设计为int类型。此方法接收一个参数,参数类型为图形类。
- 在图形类中实现compareTo()方法,用来比较两个图形的面积大小。
- 在测试类中,创建图形类的数组,数组中存放多个圆形、正方形、长方形对象,使用compareTo()方法找出数组中面积最大的图形。
package job1;
/**
* 接口
* 声明compareTo方法
* @author bsf
*/
public interface comparable {
public int compareTo(graphical graphical);
}
package job1;
/**
* 测试类
* 实现接口中的方法
* @author bsf
*/
public class testc {
public static void main(String[] args) {
graphical[] graphical = new graphical[9];
for(int i=0;i<3;i++){
circular circular=new circular(2+i);
graphical[i]=circular;
}
for(int i=3;i<6;i++){
rectangle rectangle=new rectangle(i, 1+i);
graphical[i]=rectangle;
}
for(int i=6;i<9;i++){
square square=new square(i);
graphical[i]=square;
}
int max=(int) graphical[0].area();
for (int i = 1; i < graphical.length; i++) {
if (graphical[i].area()>max) {
max=(int) graphical[i].area();
}
}
System.out.println(max);
}
}