结论
- 多态是方法的多态,属性是没有多态的
- 父类和子类是有联系的,如果没有联系,会出现类型转换异常,ClaaaCastException
- 多态存在的条件:继承关系,方法需要重写,父类引用指向子类 Father f=new Son();
不能重写的方法
- static方法,是属于类的,不属于实例
- final 常量
- private私有方法也不能被重写
父类
package com.oop.Override;
public class A {
//静态方法
// public static void test(){
// System.out.println("A->test");
// }
public void test(){
System.out.println("A->test");
}
}
子类
package com.oop.Override;
public class B extends A {
//静态方法
// public static void test(){
// System.out.println("B->test");
// }
@Override
public void test() {
// super.test();
System.out.println("我完成重写了");
}
}
测试类
package com.oop.Override;
public class Application {
public static void main(String[] args) {
//静态方法:方法的调用只和左边有关系,b调用b的方法 B->test,a调用a的方法 A->test
//非静态方法:结果全是B->test, 重写只存在于非静态方法中, @Override代表重写
//重写方法的修饰符只能是public
B b=new B();
b.test();
//父类的引用指向了子类
A a=new B();//子类重写了父类的方法
a.test();
}
}
运行结果
我完成重写了
我完成重写了