是否在Child抽象类中实现所有接口方法并不明智但是Mendatory在Grand Child类中实现所有接口方法?

时间:2016-02-25 07:17:46

标签: java

我创建了一个界面:

abstract class Castle2 implements Castle
    {
    abstract void sad();
    }

然后我把它的一个抽象类作为:

class Castle3 extends Castle2{
public void sad(){
System.out.println("SAD");
}
public static void main(String...args){
new Castle3().sad();
}
}

这里我离开了cool()的实现,如果我压缩上面的代码,它编译成功 但是当我再添加一个Castle2子类时:

abstract class Castle2 implements Castle {
Castle2();
public void sad();
}

并尝试编译上面的代码然后它甚至没有编译我的代码说明以下错误

Castle.java:13:错误:Castle3不是抽象的,并且不会覆盖Castle中的抽象方法cool()

当我在类Castle2上运行javap工具时,我得到了以下结果

if(isset($_POST['btn-signup']))
{
$reqnum = $_POST['reqnum'];
$Mnumber = $_POST['Mnumber'];
$email = $_POST['email'];
$fname = $_POST['fname'];
$address = $_POST['address'];
$sitename = $_POST['sitename'];
$payment = $_POST['payment'];

    //if()
    //{
    $new_fname= $_POST['fname'];
    $xxx = mysql_query("SELECT fname FROM gotest WHERE fname = '$new_fname'")or die(mysql_error());
    $yyy = mysql_fetch_row($xxx);

    if(mysql_num_rows($xxx) > 0)
    {
        $query = mysql_query("INSERT INTO gotest(Mnumber,email,fname,address,sitename,reqnum,payment) VALUES('$Mnumber','$email','$fname','$address','$sitename','$reqnum','$payment')");

        $r = mysql_insert_id();
        header("Location: http://uuuu.yyyyy.net/test/freecreate.php?rid=$r");

    }
    else
    {
        echo"error";
    }

}

为什么编译器强迫我在Castle3类中实现Castle的接口,而Castle2类中甚至不存在这种方法? 为什么Compiler不强迫我在Castle2类中实现Castle的接口?

2 个答案:

答案 0 :(得分:0)

因为我们无法创建抽象类的对象。但是,如果抽象类具有子类,则可以实例化此子类。 这就是为什么我们需要在子类中实现所有方法

答案 1 :(得分:0)

这是因为具体类必须具有实现,因为它们可以被实例化。假设它们允许具体类不实现接口的所有方法,就会出现问题。如果在代码中我们调用未实现的方法,则JVM将不具有未实现方法的地址。

但是抽象类无法实例化。这就是为什么抽象类实现接口的方法不是必须的。