尝试在Java中学习继承

尝试在Java中学习继承,java,Java,我正在尝试教自己如何用java编程,现在我正在尝试教自己如何使用继承 我想创建一个名为putton的类,它继承自类Door。在我的类button中,我有一个名为status的方法,它接受一个名为button的布尔值,根据值按钮,将在类门中调用方法open或close 我遇到的问题是,在我的主方法中,我试图调用第25行所示的方法状态,但我收到一条错误消息 Main类型的statusboolean方法未定义 我可以看到如何在不使用继承的情况下解决这个问题,但这样做会破坏我试图实现的目标。有人知道我如

我正在尝试教自己如何用java编程,现在我正在尝试教自己如何使用继承

我想创建一个名为putton的类,它继承自类Door。在我的类button中,我有一个名为status的方法,它接受一个名为button的布尔值,根据值按钮,将在类门中调用方法open或close

我遇到的问题是,在我的主方法中,我试图调用第25行所示的方法状态,但我收到一条错误消息

Main类型的statusboolean方法未定义

我可以看到如何在不使用继承的情况下解决这个问题,但这样做会破坏我试图实现的目标。有人知道我如何在仍然使用继承的情况下解决这个问题吗

我也尝试过将类putton和Door公开,但随后我收到新的错误消息,说这些类必须在它们自己的文件中。而且,原始错误消息不会消失

class Door{
    public void open() {
        System.out.println("Door is opened");
    }
    public void close() {
        System.out.println("Door is closed");
    }
}

class Pushbutton extends Door{
    public void status(boolean button) {
        if (button==true) {
            super.open();
        }
        else {
            super.close();
        }
    }

}

public class Main {
    public static void main(String[] args) {
        boolean button=true;
        status(button); //line 25
    }
}

您需要首先创建类型为putton的对象,以便能够使用putton类中存在的非静态方法

在这里:-

class Door{
    public void open() {
        System.out.println("Door is opened");
    }
    public void close() {
        System.out.println("Door is closed");
    }
}

class Pushbutton extends Door{
    public void status(boolean button) {
        if (button==true) {
            super.open();
        }
        else {
            super.close();
        }
    }

}

public class Main {
    public static void main(String[] args) {
        boolean open=true;

        // create object of type Pushbutton
        Pushbutton button = new Pushbutton();

        // call the method status from the object
        // and pass it the boolean parameter
        button.status(open); //line 25
    }
}
而且我认为你不应该叫它按钮,按纽在逻辑上不是门, 也许称之为家之门是因为家之门是打开和关闭的

带有静态Main方法的类Main是程序的条目。 每当您想调用另一个类中某个类的非静态方法时,必须在调用其方法之前定义该类的实例。如果这些方法属于同一类,则可以直接调用另一个方法中的方法。 因此,您希望调用Button类的status方法,首先声明Button的实例,Button Button=new Button,然后调用其方法Button.status。 公共班机{ 公共静态无效字符串[]args{ 布尔开=真; //创建按钮的实例 按钮按钮=新按钮; //调用该方法并向其传递一个布尔值 button.statusopen;//第25行 } }
在调用status方法之前,您需要创建一个putton的实例……在这种情况下,putton应该是Door的成员变量,因为这是一个有关系的变量,并且Door有一个putton是有意义的。仅仅因为您可以通过继承实现某些东西并不意味着您应该这样做。虽然我鼓励实验,但我对没有任何意义的继承模型持谨慎态度,因为我担心它们会导致您无法理解OOP在哪里有意义,在哪里没有意义。一般来说,超类通常是泛化,而子类是泛化的更具体实例。例如,你可能有一个动物超类,然后是一堆动物的子类,比如猴子、猪、熊、青蛙等等。典型的例子是形状,子类是圆形、正方形等。超类将定义一个绘制方法,然后每个子类将实现自己的绘制版本来绘制它们所代表的形状。