重写的多态
重写
重写需要有继承关系,子类重写父类的方法
- 方法名称要相同
- 参数要相同
父类A
public class A {
public void test() {
System.out.println("A>test");
}
}
子类B
public class B extends A{
public void test(){
System.out.println("B>test");
}
}
子类B重写了父类A的test方法
被static,final,private修饰的方法不可以被重写
多态
- 概念:同一方法通过不同对象会产生不同的处理
- 产生条件:
- 存在父子继承关系
- 子类重写父类中的方法
- 父类引用指向子类对象
父类A
public class A {
public void test() {
System.out.println("A>test");
}
}
子类B
public class B extends A{
public void test(){
System.out.println("B>test");
}
}
测试类Application
public class Application {
public static void main(String[] args) {
B b = new B();
b.test();
//父类引用指向子类对象
A a=new B();
a.test();
}
}
分析: 在Applocation测试类中,
B b = new B();
b.test();创建子类B的对象调用B的test方法,打印出B>test
A a=new B();
a.test();
通过父类A的引用指向了子类B的对象,会执行子类的test方法,test方法是
非静态方法,非静态方法是随着对象的创建创建的,而这里的对象是new B()
是类B的对象,所以是指向子类B的test方法
看下面的例子
public class A {
}
public class B extends A{
public void test(){
System.out.println("B>test");
}
}
public class Application {
public static void main(String[] args) {
//父类引用指向子类对象
A a=new B();
a.test();此时这里会报错,父类调用不了子类独有的方法
}
}
总结:
子类可以调用子类的方法和继承父类的方法
父类不可以调用子类独有的方法