抽象方法的属性是它没有主体,所以当具体类扩展抽象类时,它必须实现那个抽象方法。
所以我的问题是一个抽象方法在没有主体的情况下如何被覆盖?它不是实现的,而不是被覆盖的吗?
抽象方法的属性是它没有主体,所以当具体类扩展抽象类时,它必须实现那个抽象方法。
所以我的问题是一个抽象方法在没有主体的情况下如何被覆盖?它不是实现的,而不是被覆盖的吗?
具有抽象方法的抽象类。
该方法也标有abstract
并且没有主体。
public abstract class A {
public abstract void method();
}
B
扩展抽象类的类中的具体化A
。此外,该方法会丢失abstract
关键字并获取正文。
public class B extends A {
@Override
public void method() {
System.out.println("Hello");
}
}
public abstract class BaseClass {
public abstract void doSomething();
}
public class ConcreteClass extends BaseClass {
@Override
public void doSomething() {
System.out.println("Hi!");
}
}
public class AnotherConcreteClass extends BaseClass {
@Override
public void doSomething() {
System.out.println("Hello!");
}
}
被执行的doSomething
方法的实现将取决于您正在调用的对象的运行时类型doSomething
。
只需为方法提供一个实现,就可以为它提供一个主体。
public abstract class Base {
public abstract void someMethod(); // no implementation here
}
public class Sub extends Base {
@Override
public void someMethod() {
//It is Overridden
}
}
public abstract class A {
public abstract String getValue();
}
public class B extends A {
@Override
public String getValue(){
return "I'm Overriden";
}
}
就像在任何其他班级一样。
当您在子类中实现超类方法时,它将覆盖。所以即使超类方法是抽象的,如果你在子类中实现它,它也会覆盖它。
所以,
public class SuperClass{
public abstract void someMethod();
}
public class SubClass{
public void someMethod(){
System.out.println("subclass method");
}
}
Foo.java
public abstract class Foo {
public abstract void doStuff();
}
酒吧.java
public class Bar extends Foo {
@Override
public void doStuff() {
// doStuff
}
}
通过提供实现,可以像覆盖其他普通方法一样覆盖抽象方法。
这与任何其他方法覆盖相同:
public abstract class AbstractClass {
public abstract void abstractMethod();
}
...
public class ConcreteClass {
@Override
public void abstractMethod() {
....
}
}