mun*_*air 34 java polymorphism
快速问题,我正在学习接口和继承.
这不是实际代码,只是一个例子.假设我有抽象类Animal.有一些遗产,如马和犬类.还有一个界面"宠物".它将用于Animal的不同子类.犬"狗"的子类实现了"宠物"界面.因此,"Dog"的所有子类也实现了"Pet"接口,而不必在"Dog"的每个子类上单独实现"Pets",对吧?
csv*_*van 17
如果你有:
abstract class StaffMember implements MyInterface
Run Code Online (Sandbox Code Playgroud)
哪里
interface MyInterface {
void myMethod();
}
Run Code Online (Sandbox Code Playgroud)
那么扩展StaffMember的所有类都将继承MyInterface类型,并且您将能够在代码的其他部分中通过此基类型引用它们,其中MyInterface实例需要作为操作数/参数,例如:
void otherMethod(MyInterface param) { //... }
Run Code Online (Sandbox Code Playgroud)
接口MyInterface的实际实现可以在抽象类中进行,也可以在扩展抽象类的任何类中进行.重要的是,在这种情况下,myMethod()在继承层次结构中的某处指定,以便JVM可以找到要调用的定义.
Jer*_*vel 11
没有.
接口定义了类的外观(最低限度).无论是在基类还是在最低的子类中实现它都无关紧要.
接口必须在子类和基类的整个层次结构中完全实现,并且必须在接口实现签名所在的级别定义(implements Interface
).
子类本身不了解接口,但它们通过其基类具有隐式连接.
因为我是一个善良的人:
public class Test {
public static void main(String[] args) {
BaseClass obj = new SubClass();
obj.test();
obj.test2();
SomeInterface obj2 = new SubClass();
obj2.test();
obj2.test2();
}
}
interface SomeInterface {
public void test();
public void test2();
}
abstract class BaseClass implements SomeInterface {
@Override
public abstract void test();
@Override
public void test2() {
try {
System.out.println(Arrays.toString(this.getClass().getMethod("test2", null).getDeclaringClass().getInterfaces()));
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class SubClass extends BaseClass {
@Override
public void test() {
try {
System.out.println(Arrays.toString(this.getClass().getMethod("test", null).getDeclaringClass().getInterfaces()));
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
}
输出:
[]
[interface SomeInterface]
[]
[interface SomeInterface]
Run Code Online (Sandbox Code Playgroud)
正如您所看到的那样test()
(它实现的SubClass
)不会返回任何实现的接口,而test2()
(实现中BaseClass
)确实显示该接口是由该类实现的.抽象类可以允许从它们实现的接口实现方法,通过将定义标记为子类来实现abstract
.
正如您在main
方法中所看到的,将对象定义为BaseClass
或SomeInterface
工作并没有任何区别.
归档时间: |
|
查看次数: |
34387 次 |
最近记录: |