有没有办法告诉 child class 在 java 中调用了 parent 的函数?
Is there a way to tell which child class called a parent's function in java?
我有两个 class 扩展相同的 class,例如:
abstract class A {
//functions
}
class B extends A {
//functions
}
class C extends A {
//functions
}
我想要 parent class 中的一个函数根据哪个 child class 调用该函数来改变它的行为,例如, class A 将执行不同的 if 语句,具体取决于哪个 child class 调用该函数。 parent class 有没有办法知道哪个 child 构造函数正在使用它的函数?
好的,给你:
abstract class A {
// abstract functions
public void myCoolFunction(){
if(this.getClass().equals(B.class)){
System.out.println("B!");
}else{
System.out.println("NOT B!");
}
}
}
class B extends A {
//functions
}
class C extends A {
//functions
}
正在测试:
jshell> C c = new C();
c ==> C@6d4b1c02
jshell> c.myCoolFunction();
NOT B!
jshell> B b = new B();
b ==> B@4883b407
jshell> b.myCoolFunction();
B!
顺便说一下,这种技术通常是 code smell 或糟糕的设计。
我有两个 class 扩展相同的 class,例如:
abstract class A {
//functions
}
class B extends A {
//functions
}
class C extends A {
//functions
}
我想要 parent class 中的一个函数根据哪个 child class 调用该函数来改变它的行为,例如, class A 将执行不同的 if 语句,具体取决于哪个 child class 调用该函数。 parent class 有没有办法知道哪个 child 构造函数正在使用它的函数?
好的,给你:
abstract class A {
// abstract functions
public void myCoolFunction(){
if(this.getClass().equals(B.class)){
System.out.println("B!");
}else{
System.out.println("NOT B!");
}
}
}
class B extends A {
//functions
}
class C extends A {
//functions
}
正在测试:
jshell> C c = new C();
c ==> C@6d4b1c02
jshell> c.myCoolFunction();
NOT B!
jshell> B b = new B();
b ==> B@4883b407
jshell> b.myCoolFunction();
B!
顺便说一下,这种技术通常是 code smell 或糟糕的设计。