使用Java继承,当我在超类中时,如何引用特定的子类

时间:2017-12-07 18:32:49

标签: java inheritance

我有3个不同的类:

1级(超级) 2级(SubClass) 3级(SubClass)

在Class 1中,我有一个名为NUMBER的实例变量,以及一个名为myNumber的方法。

我正在尝试创建一个if / else语句,因此如果我们为类2调用.myNumber方法,则NUMBER等于7.但是,在类3中,我希望该数字等于8.

我的if else语句看起来像这样:

if (Class2) 
{
   myNumber = 7 
} 

else if (Class3) 
 { 
   myNumber = 8
 }

但是,我不知道如何引用Class2和Class3,而我正在使用Class3编写代码。

任何帮助都会很棒! :)

2 个答案:

答案 0 :(得分:2)

您可以通过继承轻松完成此操作:

class Class1 {
    int number = 5;

    public void myNumber() {

    }
}

class Class2 extends Class1 {

    @Override
    public void myNumber() {
        number = 7;
    }
}

class Class3 extends Class1 {

    @Override
    public void myNumber() {
        number = 8;
    }
}

Demo

答案 1 :(得分:2)

你不懂多态。您需要从所需的类扩展而不是使用if/else语句,并在重写方法的帮助下引入新行为。接受父类的所有代码都将接受子类,因为它们都是父(https://en.wikipedia.org/wiki/Is-a),并且可以做父母做的任何事情,但可能会有不同的行为。示例:

class ClassOne {
    private int number = 1;

    public int getNumber() {
        return number;
    }

}

class ClassTwo extends ClassOne {

    public int getNumber() {  
        return 2;
}

class ClassThree extends ClassOne {

    public int getNumber() {
        return 3;
}

测试类:

 public class TestClass {

        public static void main(String... args) {
            ClassOne classOne = new ClassOne();
            ClassOne classTwo = new ClassTwo();
            ClassOne classThree = new ClassThree();

            TestClass test = new TestClass();
            test.printNumberFrom(classOne);   // prints 1
            test.printNumberFrom(classTwo);   // prints 2
            test.printNumberFrom(classThree); // prints 3
        }

        //knows only about ClassOne but may accept it's childs
        public void printNumberFrom(ClassOne classOne) { 
            System.out.println(classOne.getNumber());
        }

    }