Override和Overload的区别?
Override是方法重写:子类中出现了和父类中方法声明一模一样的方法。(静态方法不可以重写)
Overload是方法重载:本类中出现的方法名一样,参数列表不同的方法。
Override和Overload能改变返回值类型吗?
Override的返回值类型需要与父类一致。
overload可以改变返回值类型,只看参数列表。
多态中的题目分析题
A:看下面程序是否有问题,如果没有,说出结果
- class Fu {
- public void show() {
- System.out.println("fu show");
- }
- }
- class Zi extends Fu {
- public void show() {
- System.out.println("zi show");
- }
- public void method() {
- System.out.println("zi method");
- }
- }
- class Test1Demo {
- public static void main(String[] args) {
- Fu f = new Zi();
- f.method();
- f.show();
- }
- }
复制代码
答:程序出错,f中没有method方法,编译不通过
B:看下面程序是否有问题,如果没有,说出结果
- class A {
- public void show() {
- show2();
- }
- public void show2() {
- System.out.println("我");
- }
- }
- class B extends A {
- public void show() {
- show2();
- }
- public void show2() {
- System.out.println("爱");
- }
- }
- class C extends B {
-
- public void show2() {
- System.out.println("你");
- }
- }
- public class Test2DuoTai {
- public static void main(String[] args) {
- A a = new B();
- a.show();
- B b = new C();
- b.show();
- }
- }
复制代码
答:正确
输出结果:爱
你
分析:A a = new B();
a.show();
编译时a有show方法,运行时调用B类的show方法(多态),B类不是没有show方法吗?其实是有的!B类由于继承A类,实际上也是继承了A类的show方法:
public void show() {
show2();
}
B类show方法中又调用show2方法,调用者是A类的引用a,因此编译时看的是调用A的show2方法,运行时调用的是B类的show2方法。
分析:B b = new C();
b.show();
同样地,编译时B有show方法,运行时调用C类的show方法(多态),C类中super.show()又调用父类B的show方法,父类B的show方法中又调用show2方法,而由于我们的实际对象时C类的,因此编译时调用B类show2方法,运行时调用C类的show2方法(多态) |
|