入门ooa小例子-你是否还对继承,多态,封装迷茫?跟我来看一个小例子(java)语言实现
是一个应对上机的小作业,在写的时候就想把这一段时间呢学到东西都运用上去,便写出 了这个小东西,功能没有 什么可以夸耀的,但是是自己认为是对初级ooa思想不错的小例子。便贴上来与大家分享
import java.util.Scanner;
import java.util.Calendar;
public class test1 {
public static void main(String args[] ){
try{
day day1=new day(); /*传说中的对象的实例化*/
System.out.println("请输入日");
java.util.Scanner scd = new Scanner(System.in);
String inputDay=scd.next();
day1.isNum(inputDay); /*调用对象的方法 */
day1.change(day1.inDay); /*多种向方法传参数*/
System.out.println(day1.strDay);
month month1=new month();
System.out.println("请输入月");
java.util.Scanner scm = new Scanner(System.in);
String inputMonth=scm.next();
month1.isNum(inputMonth);
month1.isMonth(inputMonth);
month1.change(month1.inDay);
System.out.println(month1.strDay);
year year1=new year();
System.out.println("请输入年");
java.util.Scanner scy = new Scanner(System.in);
String inputYear=scm.next();
year1.isNum(inputYear);
year1.leepYear(year1.year);
System.out.println(year1.strYear);
Calendar c = Calendar.getInstance(java.util.Locale.CHINA);
c.set(Calendar.YEAR,year1.year);
c.set(Calendar.MONTH,month1.inDay);
c.set(Calendar.DATE,day1.inDay);
int wd = c.get(Calendar.DAY_OF_WEEK);
String week = null;
switch(wd){
case 1:
week="星期日";
break;
case 2:
week="星期一";
break;
case 3:
week="星期二";
break;
case 4:
week="星期三";
break;
case 5:
week="星期四";
break;
case 6:
week="星期五";
break;
case 7:
week="星期六";
break;
}
System.out.println(inputYear+inputMonth+inputDay+"是:"+week+"并且"+year1.strYear);
}
catch(myException e){
System.out.println(e.getMessage());
}
catch(Exception e){
System.out.println("请输入整数"); /*原先想分别判断
整数,小数,负数,字符串,但发现String类型与int类型的转换中,因为自己水平一般只会用integer的方法,所以就只能判断范围对否了,别的
异常只能这样输出了,如果大家有好的方法,求分享和讲解*/
}
}
}
class myException extends Exception{
public myException(String msg){
super(msg); /*使用super便可以输出不同的异常信息了*/
}
}
class day {
int inDay;
String strDay;
void isNum(String strDay) throws myException{
int tDay=Integer.parseInt(strDay);
if(tDay<=0)
throw new myException("您输入的数据应该为正数");
if(tDay>31)
throw new myException("您输入的数据不合法");
else
this.inDay=tDay;
}
void change(int day){
switch(day){
case 1:
strDay="First";
break;
case 2:
strDay="Second";
break;
case 3:
strDay="Third";
break;
default :
strDay=day+"th";
}
}
}
class month extends day{ /*这便是传说中的继承*/
void isMonth(String str) throws myException{
int inMonth=Integer.parseInt(str);
if(inMonth>12)
throw new myException("您输入的月份不合法!");
else
this.inDay=inMonth;/*没有定义属性 inDay这是继承来的*/
}
void change(int month){ /*这便是多态了,子类对于父类方法的重写*/
switch(month){
case 1:
strDay="January";
break;
case 2:
strDay="February";
break;
case 3:
strDay="March";
break;
case 4:
strDay="April";
break;
case 5:
strDay="May";
break;
case 6:
strDay="June";
break;
case 7:
strDay="July";
break;
case 8:
strDay="August";
break;
case 9:
strDay="September";
break;
case 10:
strDay="October";
break;
case 11:
strDay="November";
break;
case 12:
strDay="December";
break;
}
}
}
class year{ /*这个写成独立的类,是让大家做对比,继承的好处。*/
int year;
String strYear;
void isNum(String str) throws myException{
int tYear=Integer.parseInt(str);
if(tYear<=0)
throw new myException("您输入的年应该为正数");
else
this.year=tYear;
}
void leepYear(int year){
if((year%4==0&&year%100!=0)||year%400==0)
strYear=year+"是润年";
else
strYear=year+"不是润年";
}
}