Java 更改子类中变量的值?
我有两门课。一个是24小时制,第二个是第一个的子类,是12小时制。 要在第二个类中转换新时间,我需要更改第一个类的值。但我不能那样做。 我说的是“h”变量 具体地说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){
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 { }