对于类型Base

时间:2017-08-09 05:20:32

标签: java inheritance

public class Base {
    public String Method1() {
        System.out.println("Inside Base method 1");
        return "";
    }
}
class Child extends Base {
    static Base o = null;
    public String Method1() {
        System.out.println("Inside Base method 1");
        return "";
    }
    public String Method2() {
        return "Cant be called with base reference";
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Base base = new Child();
        base.Method1();
        base.Method2();***(Error : **The method Method2() is undefined for the type Base**)***
    }
}

正如代码建议我想知道的,在内存分配中实际发生的事情是隐藏Base调用Child的额外方法以及它的名称 有没有办法通过Base调用方法。 请帮忙

2 个答案:

答案 0 :(得分:1)

Base base = new Child(); 无效,因为Base类没有带有该名称的方法,这就是错误的含义

  

方法2()未定义类型Base

因为你这样做:

Base base = new Child();
base.Method1();
((Child) base).Method2();

你有一个选项是投射,然后你可以调用那个方法......

pip3 install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user
jupyter nbextension enable toc2/main 

答案 1 :(得分:0)

您需要更多地了解多态性的工作原理。 您的实例是一个孩子,但您像Base一样使用它。基地对他的孩子一无所知,他只知道他的方法。 将实例强制转换为Child以访问其自定义方法。

<?php
$phone_no = $_POST['phone'];
switch($phone_no){
    case "123456789":
         header("Location: www.site.org");
         break;
    case "987654321":
        header("Location: www.site2.org");
        break;
    default:
        header("Location: www.site3.org");
        break;
}
?>