2017-02-25 112 views
1

我有父类和子类,其中父类具有方法getData。我可以直接从子类调用此方法,无论是否创建对象。 我想知道如何在没有创建对象的情况下在子类中使用该方法。 (它也不是静态方法) 这是我的理解,我们必须创建一个对象来访问方法。任何人都可以解释为什么?Java-在继承中,可以在不创建类的情况下调用方法

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

你是什么意思*“没有创建对象”*?你创建了'testproperties_file'的实例吗? – UnholySheep

+1

子实例**是**父实例。这就是完整的继承点。如果一只动物能跑,比我可以让一只狗跑​​,因为一只狗是一只动物。 –

+0

当执行在子类中时,调用在'this'上。它指的是当前的对象。当你调用'test_class'方法时,它将在'testproperties_file'的对象上被调用。 – Sid

回答

1

我想知道如何在不创建对象的情况下在子类 中获得该方法。

class testproperties_file extends testbase { 
    @Test 
    public void test_class() throws IOException{ 
     getData("name"); 

    } 
} 

这里test_class()是一个实例方法。这意味着在此方法中调用的所有代码都可以调用当前类的实例的可用方法(这里是testproperties_file)。所以,当这个方法执行时你已经在一个对象中了。

testproperties_file的一个实例继承自testbase类。
这意味着可以在这里调用testbase的所有公共和受保护的实例方法。公开getData()testbase的实例方法是可以调用的。


作为一个附注,你应该使用大写和驼峰命名你的班级。 TestBaseTestPropertiesFile更好,因为它们遵循java编码约定。

1

作为每

https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

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

我建议你阅读更多关于云燕inheritance

子子继承父类中的所有成员的方法。

如果执行控制达到任何非静态方法,则意味着有一个对象被创建并且正在调用该方法。 this是对任何方法被调用的当前执行对象的隐式引用。由于派生类的对象具有超类的行为,因此根据实际派生类的定义添加更多行为,并且如果有任何行为被重写,那么从超类中删除的行为会被修改。

相关问题