Java多态学习

今天遇到一个问题,决定梳理一下java基础多态特性。
问题如下:

public class FatherClass {
    public String name = "FatherClass";
}

public class ChildClass extends FatherClass{
    public String name = "ChildClass";
}

public class Test001 {

    public static void main(String[] args) {
        FatherClass sc = new ChildClass();
        //这里打印出来的是什么
        System.out.println(sc.name);
    }

}

结果:

FatherClass

原因:
多态只有方法可以重写,变量不可以重写,在调用时,还是调用的父类的变量。

因为觉得是ChildClass,所以查找原因,这也是复习多态的契机

环境:JDK1.7
Eclipse Oxygen.2 Release (4.7.2)

例子1:

public class FatherClass {
    public void fun() {
        System.out.println("I'm FatherClass fun");
    } 
}

public class ChildClass extends FatherClass{
    public void fun() {
        System.out.println("I'm ChildClass fun");
    }
}

public class Test002 {

    public static void main(String[] args) {
        FatherClass sc = new ChildClass();
        sc.fun();
    }

}

结果:

I'm ChildClass fun

原因:
如果方法被重写,则调用子类的方法

例子2:

public class FatherClass {
    public void fun() {
        System.out.println("I'm FatherClass fun");
    } 
}

public class ChildClass extends FatherClass{
    public void fun() {
        System.out.println("I'm ChildClass fun");
    }

    public void privateMethod() {
        System.out.println("I'm ChildClass privateMethod");
    }
}

public class Test002 {

    public static void main(String[] args) {
        FatherClass sc = new ChildClass();
        sc.privateMethod();
    }

}

结果:

sc.privateMethod();这一行报错,因为父类的类型的引用不能调用父类中没有的方法

原因:
只能调用父类中定义的方法和变量

根据这两个例子,还有我遇到的第一个问题得出,多态就是父类类型指向子类对象,多态的表现方式其实就是继承,主要有四点:

1. 多态只有方法可以重写,变量不可以重写,在调用时,还是调用的父类的变量。
2. 如果方法被重写,则调用子类的方法。
3. 只能调用父类中定义的方法和变量

猜你喜欢

转载自blog.csdn.net/u011008029/article/details/78932461