Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改子类中变量的值?_Java_Variables_Subclass - Fatal编程技术网

Java 更改子类中变量的值?

Java 更改子类中变量的值?,java,variables,subclass,Java,Variables,Subclass,我有两门课。一个是24小时制,第二个是第一个的子类,是12小时制。 要在第二个类中转换新时间,我需要更改第一个类的值。但我不能那样做。 我说的是“h”变量 具体地说 class Clock{ public int h, m , s; public String a,b,c; public void setHour(int hour){ this.h = hour; } public void setMin(int min){

我有两门课。一个是24小时制,第二个是第一个的子类,是12小时制。 要在第二个类中转换新时间,我需要更改第一个类的值。但我不能那样做。 我说的是“h”变量 具体地说

    class Clock{
    public int h, m , s;
    public String a,b,c;

    public void setHour(int hour){
        this.h = hour;
    }
    public void setMin(int min){
        this.m = min;
    }
    public void setSec(int sec){
        this.s = sec;
    }
    public void tick(){ 
        if(h != 23){
            if(m == 59 && s==59){
                m = 0;
                s=0;
                h++;
            }
            else if(m != 59 && s == 59){
                m++;
                s=0;
            }
            else if ( m != 59 && s != 59){
                s++;
            }
            else if( m == 59 && s!=59){
                s++;
            }
        }

        else if(h == 23 && m == 59 && s !=59){
            s++;
        }
        else if(h == 23 && m!=59 && s == 59){
            s=0;
            s++;
            m++;
        }
        else if(h == 23 && m!=59 && s!=59){
            s++;
        } 
        else if(h == 23 && m == 59 && s == 59){
            s = 0;
            m =0;
            h = 0;
        }
    }
    public String toString(){ 
        a = "";
        b = "";
        c = "";

        if (h < 10)
            a = "0";
        if (m <10 )
            b = "0";
        if (s <10)
            c = "0";

        return a+h+":"+b+m+":"+c+s;
    }
}

   class AMPMClock extends Clock{
    Clock clock2 = new Clock();
    public void setAMPM(boolean yes){
        if(yes == true){
            **clock2.h = clock2.h - 12**;
        }
    }
}
类时钟{
公共int h、m、s;
公共字符串a、b、c;
公共无效设置小时(整小时){
h=小时;
}
公共无效设置最小值(整数最小值){
这个。m=分钟;
}
公共无效设置(整数秒){
这个s=秒;
}
公共无效勾号(){
如果(h!=23){
如果(m==59&&s==59){
m=0;
s=0;
h++;
}
如果(m!=59&&s==59),则为else{
m++;
s=0;
}
如果(m!=59&&s!=59),则为else{
s++;
}
else如果(m==59&&s!=59){
s++;
}
}
否则如果(h==23&&m==59&&s!=59){
s++;
}
否则如果(h==23&&m!=59&&s==59){
s=0;
s++;
m++;
}
如果(h==23&&m!=59&&s!=59){
s++;
} 
否则如果(h==23&&m==59&&s==59){
s=0;
m=0;
h=0;
}
}
公共字符串toString(){
a=“”;
b=“”;
c=“”;
if(h<10)
a=“0”;
如果(m你可以写

class AMPMClock extends Clock {
  private boolean pm = false;
  public void setHour(int hour) {
    if (hour >= 12) {
        hour -= 12;
        pm = true;
    } else {
        pm = false;
    }
    super.setHour(hour);
  }
  public void setPM(boolean pm){
    this.pm = pm;
  }
}

设置时应验证
hour
。所有字段都应为私有字段,并且应具有小时、分钟和秒的getter。在AMPMClock中不需要两个时钟,因为AMPMClock是一个时钟。将AM/PM设置为
yes
只会让人困惑。

看起来您对CLA之间的差异感到困惑ses和对象


签出:

您的
AMPMClock
应该只是扩展
时钟,或者只是使用它。但是您正在尝试将它们结合起来,如下所示:

class AMPMClock extends Clock {
    Clock clock2 = new Clock();
扩展:

class AMPMClock extends Clock {
因为公共accesor方法是继承的,所以可以在
this
上调用getter/setter方法。例如
this.getHour()

或者使用它,但不要扩展:

class AMPMClock {
    Clock clock2 = new Clock();
在这里,不要使用
this
而是使用
clock2
。例如
clock2.getHour()

但是,您需要将所有实例成员设置为私有的(它们不应该是公共的),并为所有实例成员设置相应的公共getter/setter

正如dasblinkenlight所建议的:

最好有一个抽象类:

public abstract class BaseClock {
    private int h, m, s;
    //getter/setter
}
和两种不同的混凝土等级:

public class TwelveHourClock extends BaseClock { }


战术上的答案是将click2改为“this”.战略性的、更大的问题是没有真正正确地利用继承。

如果setAMPM为真,我想更改h变量。但我不会更改!!它给了我00:00:00,24小时时钟不应该是12小时时钟的扩展吗?你应该重新设计继承结构:它严重违反了,因为12小时clock绝对不是24小时时钟。你应该有一个抽象的基类
clock
,从中派生出12小时和24小时时钟类。是的,但是我应该在BaseClock中写什么?因为在clock类中我已经写了通用代码。如何更改它并在不同的类中写24小时时钟??
public class TwentyFourHourClock extends BaseClock { }