直接看例子、注释和输出吧
class A {
public void func1() {
System.out.println("A func1 is calling");
}
public void func2() {
func1();
}
}
class B extends A {
public void func1() {
System.out.println("B func1 is calling");
}
public void func3() {
System.out.println("B func3 is calling");
}
}
class C {
public static void main(String[] args) {
// 一个父类对象被子类赋值了
A a = new B();
//func1被重载
a.func1();
//func1被重载
a.func2();
//父类被子类赋值不能用子类方法
//a.func3();
//需要显式转换变成B才可以
((B) a).func3();
//子类不能被父类赋值
//B b = new A();
}
}
输出:
核心:
父类可以被子类赋值
子类不可以被父类赋值
继承里面的虚函数重载
然后需要显式转换才可调用该子类方法
ps
如果父类强制类型转换成子类,编译会通过
但是调用方法时候会抛出异常