1.形状类
定义shape接口,包含两个抽象函数成员void setvalues() 和float area() ,由shape进行派生如下:
-
矩形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个函数成员,完成数据成员值的设定和面积的计算;
-
三角形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个函数成员,完成数据成员值的设定和面积的计算;
-
正方形类,包含一个数据成员变量用于描述边长,float类型,重新定义上述两个函数成员,完成数据成员值的设定和面积的计算;
-
圆形类,包含一个数据成员变量用于描述半径,float类型,重新定义上述两个函数成员,完成数据成员值的设定和面积的计算;
在主函数中定义对象,利用虚函数实现多态,依次分别输入矩形的底和高,三角形的底和高,正方形的边长,圆形的半径,若其中任何一个值小于等于0,则输出Set Value Error!,然后退出程序,对于之前已正确输入的数值计算相应形状的面积。
1 import java.util.Scanner; 2 //Shape接口 3 interface Shape { 4 public void setValues(float a, float b); 5 public float area(); 6 } 7 //矩形类 8 class Rectangle implements Shape { 9 private float height; 10 private float weight; 11 @Override 12 public void setValues(float a, float b) { 13 height = a; 14 weight = b; 15 } 16 @Override 17 public float area() { 18 return height * weight; 19 } 20 } 21 //三角形类 22 class Triangle implements Shape { 23 private float height; 24 private float weight; 25 @Override 26 public void setValues(float a, float b) { 27 height = a; 28 weight = b; 29 } 30 @Override 31 public float area() { 32 return (height * weight) / 2; 33 } 34 } 35 //正方形类 36 class Square implements Shape { 37 private float length; 38 @Override 39 public void setValues(float a, float b) { 40 length = a; 41 } 42 @Override 43 public float area() { 44 return length * length; 45 } 46 } 47 //圆形类 48 class Circle implements Shape { 49 private float radius; 50 @Override 51 public void setValues(float a, float b) { 52 radius = a; 53 } 54 @Override 55 public float area() { 56 return radius * radius * 3.14f; 57 } 58 } 59 60 public class Test { 61 public static void main(String[] args) { 62 Scanner in = new Scanner(System.in); 63 Rectangle r = new Rectangle(); 64 Triangle t = new Triangle(); 65 Square s = new Square(); 66 Circle c = new Circle(); 67 float w1, h1, w2, h2, l, a; 68 System.out.print("请输入矩形的底和高:"); 69 w1 = in.nextFloat(); 70 h1 = in.nextFloat(); 71 System.out.print("请输入三角形的底和高:"); 72 w2 = in.nextFloat(); 73 h2 = in.nextFloat(); 74 System.out.print("请输入正方形的边长:"); 75 l = in.nextFloat(); 76 System.out.print("请输入圆形的半径:"); 77 a = in.nextFloat(); 78 if (w1 > 0) { 79 if (h1 > 0) { 80 r.setValues(w1, h1); 81 System.out.println("矩形面积:" + r.area()); 82 } 83 } 84 if (w2 > 0) { 85 if (h2 > 0) { 86 t.setValues(w2, h2); 87 System.out.println("三角形面积:" + t.area()); 88 } 89 } 90 if (l > 0) { 91 s.setValues(l, l); 92 System.out.println("正方形面积:" + s.area()); 93 } 94 if (a > 0) { 95 c.setValues(a, a); 96 System.out.println("圆的面积:" + c.area()); 97 } 98 if (w1 <= 0 || h1 <= 0 || w2 <= 0 || h2 <= 0 || l <= 0 || a <= 0) { 99 System.out.println("Set Value Error!"); 100 System.exit(0); 101 } 102 } 103 }
2.学生类
-
定义描述学生的student类,包含受保护两个数据成员,分别是描述姓名的,string类型和描述学号的,int类型,构造函数有两个形参,用于设定这两个数据成员的值;
-
由学生类派生本科生类understud,新增受保护数据成员,描述专业,string类型,构造函数具有三个形参;
-
由本科生类派生研究生类poststud,新增私有数据成员,描述导师姓名,string类型,构造函数具有四个形参;
-
学生姓名默认值为“***”,学号默认值为-1,专业默认值为“###”,导师姓名默认值为“&&&”;
在主函数中定义对象,定义开关变量,int型,通过输入进行赋值,若该值为0,则输出研究生对象的默认属性值,若非零,则依次输入姓名、学号、专业和导师信息,并依次打印出来。
1 import java.util.Scanner; 2 //学生类 3 abstract class Student{ 4 protected String name; //姓名 5 protected int ID; //学号 6 public Student() { 7 this.name="***"; 8 this.ID=-1; 9 } 10 public Student(String name,int ID) { 11 this.name=name; 12 this.ID=ID; 13 } 14 public void setNameID(String name,int ID) { 15 this.name=name; 16 this.ID=ID; 17 } 18 public void displayNameID() { 19 System.out.println("姓名:"+name); 20 System.out.println("学号:"+ID); 21 } 22 public abstract void setMajor(String str); 23 public abstract String getMajor(); 24 } 25 //本科生类 26 class Understud extends Student{ 27 private String major; //专业 28 public Understud() { 29 super(); 30 this.major = "###"; 31 } 32 public Understud(String name, int ID,String major) { 33 super(name, ID); 34 this.major=major; 35 } 36 public void setMajor(String str) { 37 major=str; 38 } 39 public String getMajor() { 40 return major; 41 } 42 } 43 //研究生类 44 class Poststud extends Understud{ 45 private String advisor; //导师 46 public Poststud() { 47 super(); 48 this.advisor = "&&&"; 49 } 50 public Poststud(String name,int ID,String major,String advisor) { 51 super(name, ID, major); 52 this.advisor=advisor; 53 } 54 public void setAdvisor(String str) { 55 advisor=str; 56 } 57 public String getAdvisor() { 58 return advisor; 59 } 60 } 61 public class Test { 62 public static void main(String[] args) { 63 Scanner in=new Scanner(System.in); 64 Poststud s=new Poststud(); 65 int t,a; 66 String str1,str2,str3; 67 System.out.print("请输入整数t(t!=0时赋值):"); 68 t=in.nextInt(); 69 if(t==0) { 70 s.displayNameID(); 71 System.out.println("专业:"+s.getMajor()); 72 System.out.println("导师:"+s.getAdvisor()); 73 } 74 else { 75 System.out.println("请依次输入姓名、学号、专业和导师:"); 76 str1=in.next(); 77 a=in.nextInt(); 78 str2=in.next(); 79 str3=in.next(); 80 s=new Poststud(str1,a,str2,str3); 81 s.displayNameID(); 82 System.out.println("专业:"+s.getMajor()); 83 System.out.println("导师:"+s.getAdvisor()); 84 } 85 } 86 }