java中的重写 (override)

父类
public abstract class A {
    public void sayHello(){
        System.out.println("sayHello in A");
    }

    public abstract void sayHi();
}



子类B
public class B extends A{
    @Override
    public void sayHi(){
        System.out.println("sayHi() in B");
    }
}



子类C
public class C extends A{
    @Override
    public void sayHi() {
        System.out.println("sayHi() in C");
    }
}


测试一下效果
public class Test {
    public static void main(String[] args){
        A a = new B();
        a.sayHello();
        a.sayHi();
        
        a = new C();
        a.sayHello();
        a.sayHi();
    }
}


结果是:
sayHello in A
sayHi() in B
sayHello in A
sayHi() in C


------
下面说下错误的写法。

在父类里没有写那个虚函数。
父类A
public abstract class A {
    public void sayHello(){
        System.out.println("sayHello in A");
    }
}


子类B
public class B extends A{
    public void sayHi(){
        System.out.println("sayHi() in B");
    }
}


测试
public class Test {
    public static void main(String[] args){
        A a = new B();
        a.sayHello();
        //a.sayHi();  这句话是会报错的。、
        //用父类指针指向子类,如果父类中没有这个方法,你即便指向的子类有这个方法
        //也没有办法用这个父类指针来调用这个方法。(如果你真的想要这么做,就必须要审明一个虚函数。)
    }
}

猜你喜欢

转载自have-life.iteye.com/blog/1629100
今日推荐