Java—在继承中,方法可以在不创建类的情况下调用

Java—在继承中,方法可以在不创建类的情况下调用,java,inheritance,Java,Inheritance,我有父类和子类,其中父类有一个方法-getData。我可以在创建或不创建对象的情况下直接从子类调用此方法。 我想知道该方法如何在不创建对象的情况下在子类中可用。(也不是静态方法) 我的理解是,我们必须创建一个对象来访问这些方法。谁能解释一下原因吗 public class testbase { public void getData(String Data) throws IOException{ Properties prop1; prop1= n

我有父类和子类,其中父类有一个方法-
getData
。我可以在创建或不创建对象的情况下直接从子类调用此方法。 我想知道该方法如何在不创建对象的情况下在子类中可用。(也不是静态方法) 我的理解是,我们必须创建一个对象来访问这些方法。谁能解释一下原因吗

 public class testbase {

    public void getData(String Data) throws IOException{
        Properties prop1;

        prop1= new Properties();
        FileInputStream f= new FileInputStream("C:\\file.properties");
        prop1.load(f);


        String data= prop1.getProperty(Data);
        System.out.println(data);
    }

}


class testproperties_file extends testbase {

    @Test
    public void test_class() throws IOException{
        getData("name");

    }
}
依照

子类从其超类继承所有成员(字段、方法和嵌套类)。构造函数不是成员,因此它们不会被子类继承,但是可以从子类调用超类的构造函数

我建议您阅读更多关于继承的内容

子级从其超类继承所有成员方法

若执行控制到达任何非静态方法,则意味着创建了一个对象,并在该对象上调用该方法
是对调用任何方法的当前执行对象的隐式引用。由于派生类的对象具有超类的行为,则会根据实际派生类的定义添加更多行为,并且如果覆盖了任何行为,则会修改从超类派生的行为

我想知道该方法如何在子类中可用 不创建对象

这里的
test\u class()
是一个实例方法。这意味着在该方法中调用的所有代码都可以调用当前类的实例可用的方法(此处
testproperties\u文件
)。因此,在执行此方法时,您已经在对象中

testproperties\u文件的实例继承自
testbase
类。
这意味着
testbase
的所有公共和受保护实例方法都可以在这里调用。
testbase
的public
getData()
实例方法是如此的可调用


作为旁注,您应该使用大写和camelcase来命名您的类。
TestBase
TestPropertiesFile
更好,因为它们遵循java编码约定。

什么是“不创建对象”?您创建了一个
testproperties\u文件的实例,不是吗?子实例是父实例。这就是继承的全部意义。如果一个动物可以运行,那么我就可以让狗运行,因为狗是一个动物。当执行在子类中时,调用是在
this
上。它指的是当前对象。当您调用
test\u类
方法时,它将在
testproperties\u文件
的对象上被调用。
class testproperties_file extends testbase {
    @Test
    public void test_class() throws IOException{
       getData("name");

    }
}