java多态和继承_java之 ------ 类的封装、继承和多态(一)

标签:

问题:① 完善set()方法,保证获得正确的日期值(合法性);

② 将tomorrow()和yestoday()方法合并为以下daysAfter()方法,并增加一些方法:

public int getWeek()   //返回当前日期对应的星期几,范围为0~6

public String toWeekString()   //返回当前日期对应星期几的中文字符串

public booleanbefore(MyDate d)  //判断是否在指定日期之前

public int daysBetween(MyDate d) //返回当前日期与日期d之间相距的天数

public booleanequals(Object obj)  //比较两个对象是否相等

import java.util.Calendar;

import java.util.Scanner;

public class MyDate2 {

int year,month,day;

boolean isCorrect=true;

private static int thisYear;

static {

thisYear=Calendar.getInstance().get(Calendar.YEAR); //获得当前日期对象中的年份值

}

public MyDate2(int year, int month, int day) {

this.set(year, month, day);

}

public MyDate2() {

this(1970,1,1); //调用本类已声明的其他构造方法

}

public MyDate2(MyDate2 d) {

this.set(d);

}

public void set(int y, int m, int d) {

if(y<1){

System.out.println("Input Year Is Error !!!");

this.isCorrect=false;

return ;

}if(m<1||m>12){

System.out.println("Input Month Is Error !!!");

this.isCorrect=false;

return ;

}

if(day<=0 || day>daysOfMonth() ){

System.out.println("Input Day Is Error !!!");

this.isCorrect=false;

return ;

}

this.year = y;

this.month = m;

this.day = d ;

}

public void set(MyDate2 d) {

set(d.year, d.month, d.day); //调用同名成员方法,不能使用this()

}

public String toString(){

return this.year+"年"+this.month+"月"+this.day+"日";

}

public static int getThisYear(){

return thisYear; //访问静态成员变量

}

public static boolean isLeapYear(int year) {

return year%400==0 || year%100!=0 && year%4==0;

}

public boolean isLeapYear() {

return isLeapYear(this.year); //调用静态方法

}

public boolean equals(MyDate2 d) { //this指代调用本

方法的当前对象

return this==d || d!=null && this.year==d.year && this.month==d.month && this.day==d.day;

}

public boolean equals(Object obj) {

if (this==obj) //this指代调用当前方法的对象

return true;

if (obj instanceof MyDate2) {

MyDate2 d = (MyDate2)obj; //类型强制转换

return this.year==d.year && this.month==d.month && this.day==d.day;

}

return false;

}

public static int daysOfMonth(int year, int month) {

switch (month) //计算每月的天数

{

case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;

case 4: case 6: case 9: case 11: return 30;

case 2: return isLeapYear(year)?29:28;

default: return 0;

}

}

public int daysOfMonth() {

return daysOfMonth(this.year, this.month);

}

public void tomorrow() {

this.day++; //通过this改变当前对象的值,没有返回值

if (day>this.daysOfMonth()){

day=1;

month++;

if (month>12)

{

month=1;

year++;

}

}

}

public MyDate2 yestoday() {

MyDate2 yes=new MyDate2(this); //执行拷贝构造方法,创建新实例,没有改变当前对象

this

yes.day--;

if (yes.day==0) {

yes.month--;

if (yes.month==0){

yes.month=12;

yes.year--;

}

yes.day = daysOfMonth(yes.year, yes.month);

}

return yes; //返回对象引用

}

public MyDate2 dayAfter(int n) {

MyDate2 yes=new MyDate2(this); //执行拷贝构造方法,创建新实例,没有改变当前对象

this

yes.day+=n;

if (yes.day==0) {

yes.month--;

if (yes.month==0){

yes.month=12;

yes.year--;

}

yes.day = daysOfMonth(yes.year, yes.month);

//System.out.println("**"+yes.year+" "+yes.month+" "+yes.day);

return yes;

}

if (yes.day>this.daysOfMonth()){

yes.day=1;

yes.month++;

if (yes.month>12)

{

yes.month=1;

yes.year++;

}

}

return yes; //返回对象引用

}

public int getSumDays(MyDate2 d){

int sum=0;

for(int i=1;i

sum+=d.isLeapYear(i) ? 366 : 365;

}

for(int i=1;i

sum+=d.daysOfMonth(d.year,i);

}

sum+=d.day;

return sum;

}

public int getWeek(){

long sum=0;

int week;

for(int i=1;i

sum+=this.isLeapYear(i) ? 366 : 365;

}

for(int i=1;i

sum+=this.daysOfMonth(this.year,i);

}

sum+=this.day;

week=(int)sum%7;

return week;

}

public String toWeekString(){

switch (getWeek()){

case 0 : return "Sunday" ;

case 1 : return "Monday" ;

case 2 : return "Tuesay" ;

case 3 : return "Wednesday" ;

case 4 : return "Thursday" ;

case 5 : return "Friday" ;

default : return "Saturday" ;

}

}

public boolean before(MyDate2 d){

if(this.year

return true;

}else if(this.year==d.year){

if(this.month

return true;

}else if(this.month==d.month){

if(this.day

return true;

}else{

return false;

}

}else{

return false;

}

}else{

return false;

}

}

public int daysBetween(MyDate2 d){

int a=getSumDays(d);

int b=getSumDays(this);

return Math.abs(a-b);

}

}

class MyDate_ex

{

public static void main(String args[])

{

Scanner sc=new Scanner(System.in);

System.out.println("Please input date : ");

while(sc.hasNext()){

MyDate2 d= new MyDate2(sc.nextInt(),sc.nextInt(),sc.nextInt());

if(d.isCorrect){

System.out.println("If you want to konw yestoday date,please input -1 ");

System.out.println("or tomorrow date,please input 1");

System.out.println(d.dayAfter(sc.nextInt()));

System.out.println("Week : "+d.getWeek()+" "+d.toWeekString());

System.out.println("Input a cmparative date : ");

MyDate2 r=new MyDate2(sc.nextInt(),sc.nextInt(),sc.nextInt());

System.out.println(d.before(r));

System.out.println("Date_d between Date_r have "+d.daysBetween(r)+" days");

}

System.out.println();

System.out.println("Please input date : ");

}

}

}

标签:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值