强制方法实现
force method implementation
有什么方法可以强制 class 扩展具体 class 以实现 Java 中的超级 class' 方法之一?我想要的是这样的:
class SomeClass {
/* modifiers */ aMethod(){
/* an implementation */
}
}
class SubClass extends SomeClass {
/* if I don't reimplement aMethod() here, I get a compiler error */
}
提前致谢!
您可以通过两种方式做到这一点 - 使用 interface
或 abstract class
下面是两者的示例。
摘要Class:
public abstract class SomeClass {
public abstract void aMethod();
}
public class SubClass extends SomeClass {
@Override
public void aMethod() {
// An error would occur if aMethod isn't here.
}
}
接口:
public interface SomeClass { // You'd probably want to name it something different
public abstract void aMethod();
}
public class SubClass extends SomeClass {
@Override
public void aMethod() {
// An error would occur if aMethod isn't here.
}
}
编辑: 此外,接口中只能有抽象方法——而在抽象 class 中,方法可以有主体。抽象 class 通常用于 API。
检查 class 被调用的方法,如果调用 class 与父 class 相同,则抛出这样的异常
public class SomeClass {
public void method() throws NoSuchMethodException, Exception {
System.out.println("override me");
if(SomeClass.class.getMethod("method", null).getDeclaringClass().equals(SomeClass.class)) {
throw new Exception("Not Overriden");
}
}
}
public class SubClass extends SomeClass {
public SubClass() {
}
@Override
public void method() {
System.out.println("hiii");
}
}
你可以将 super class 作为接口,这样 subclass 必须提供 super class 方法的实现,因为接口中存在的方法默认是抽象的。
public interface SomeClass {
public abstract void aMethod();
}
public class SubClass implements SomeClass {
public void aMethod() {
// provide implementation or it will give error
}
}
有什么方法可以强制 class 扩展具体 class 以实现 Java 中的超级 class' 方法之一?我想要的是这样的:
class SomeClass {
/* modifiers */ aMethod(){
/* an implementation */
}
}
class SubClass extends SomeClass {
/* if I don't reimplement aMethod() here, I get a compiler error */
}
提前致谢!
您可以通过两种方式做到这一点 - 使用 interface
或 abstract class
下面是两者的示例。
摘要Class:
public abstract class SomeClass {
public abstract void aMethod();
}
public class SubClass extends SomeClass {
@Override
public void aMethod() {
// An error would occur if aMethod isn't here.
}
}
接口:
public interface SomeClass { // You'd probably want to name it something different
public abstract void aMethod();
}
public class SubClass extends SomeClass {
@Override
public void aMethod() {
// An error would occur if aMethod isn't here.
}
}
编辑: 此外,接口中只能有抽象方法——而在抽象 class 中,方法可以有主体。抽象 class 通常用于 API。
检查 class 被调用的方法,如果调用 class 与父 class 相同,则抛出这样的异常
public class SomeClass {
public void method() throws NoSuchMethodException, Exception {
System.out.println("override me");
if(SomeClass.class.getMethod("method", null).getDeclaringClass().equals(SomeClass.class)) {
throw new Exception("Not Overriden");
}
}
}
public class SubClass extends SomeClass {
public SubClass() {
}
@Override
public void method() {
System.out.println("hiii");
}
}
你可以将 super class 作为接口,这样 subclass 必须提供 super class 方法的实现,因为接口中存在的方法默认是抽象的。
public interface SomeClass {
public abstract void aMethod();
}
public class SubClass implements SomeClass {
public void aMethod() {
// provide implementation or it will give error
}
}