我有父类和子类,其中父类有一个方法 - 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");
}
}
答案 0 :(得分:1)
根据
https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
子类从其超类继承所有成员(字段,方法和嵌套类)。构造函数不是成员,因此它们不是由子类继承的,但是可以从子类调用超类的构造函数。
我建议你阅读更多内容inheritance
Sub子类从其超类继承所有成员方法。
如果执行控制到达任何非静态方法,则意味着创建了一个对象,并在其上调用该方法。 this
是对当前正在执行的对象的隐式引用,在该对象上调用任何方法。由于派生类的对象具有超类的行为,因此根据实际派生类的定义添加更多行为,并且如果任何行为被覆盖,则从超类中删除的行为被修改。
答案 1 :(得分:1)
我想知道该方法如何在子类中可用 没有创建对象。
class testproperties_file extends testbase {
@Test
public void test_class() throws IOException{
getData("name");
}
}
这里test_class()
是一个实例方法。这意味着在此方法中调用的所有代码都可以调用可用于当前类的实例的方法(此处为testproperties_file
)。因此,当执行此方法时,您已经处于对象中。
testproperties_file
的实例继承自testbase
类
这意味着可以在此处调用testbase
的所有公共和受保护实例方法。 <{1}}的公共getData()
实例方法是可以调用的。
作为旁注,您应该使用大写和camelcase来命名您的班级。
testbase
和TestBase
更符合java编码惯例。