[英]Dependency injection and Inheritance in Java
我有以下代碼:
public class GrandParent {
public void greet() {
System.out.println("Hello from grandpa.");
}
}
public class Parent extends GrandParent {
public void run() {
greet();
}
}
public class RunMe {
public static void main(String args[]) {
Parent p = new Parent();
p.run();
}
public void greet() {
System.out.println("Hi.");
}
}
我的任務是編寫類RunMe,並盡可能不修改類Parent和GrandParent。 我該如何實現,當執行到達Parent的run()時,將執行RunMe的greet(或可能在另一個地方),而不是GrandParent的greet()。
還是首先有可能?
我不知道如果要讓一個未擴展的Parent對象在不更改Parent或Grandparent代碼的情況下調用不同的greet方法,怎么辦?
您可以在RunMe中編寫一個實例(非靜態)內部類,該內部類擴展了Parent並覆蓋了Parent實例的run(),從而可以調用RunMe實例的run()。 您的main()方法將創建新子類的實例,而不是Parent的實例。
首先,您需要一個RunMe
實例來調用其run()
方法,因為它不是靜態方法。 了解Parent
發生的情況的一種方法是將Parent
子類化:
public static void main(String args[]) {
final RunMe runMe = new RunMe();
Parent p = new Parent() {
public void run() {
super.run(); // runs Parent.run()
runMe.run(); // runs the hook function
}
};
p.run();
}
我不知道這是不是你要的。
嘗試這個:
public class MyParent extends Parent {
@Override
public void greet() {
System.out.println("hello from MyParent");
}
}
public class RunMe {
public static void main(String args[]) {
Parent p = new MyParent();
p.run();
}
}
我認為您的意思是:
public class RunMe extends Parent {
public static void main(String args[]) {
Parent p = new RunMe();
p.run();
}
public void greet() {
System.out.println("Hi.");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.