第二十三天

学习了Java的多态的实现和向上转型和向下转型的类型监测

明天学习Java的动态绑定

一、Java三大特性:封装、继承、多态

通俗的讲,多态具体表现在方法的重载和覆盖Overload(重写)

public class Father {
    public void say() {
        System.out.println("father say");
    }
    public static void main(String[] args) {
        Son son=new Son();
        son.say();
    }
}
class Son extends Father{
    public void say() {
        System.out.print("son say()");
    }
}

子类重写父类中的方法,即子类中的方法与父类中的方法保持一致。但是方法的修饰符一定要大于等于父类中的方法的修饰符。

此时,在子类中调用与父类相同的方法时,则调用的是子类,并非父类的方法。

public class Father {
    public void say() {
        System.out.println("father say");
    }
    public static void main(String[] args) {
        Son son=new Son();
        son.say();
    }
}
class Son extends Father{
    public void say() {
        System.out.print("son say()");
    }
}

二、类型检测——向下转型/向下转型

向上转型是指父类对象的引用指向子类对象。向下转型是指在向上转型的基础上再次指向子类的对象。

1、向上转型

父类 对象=new 子类()

public class Father {
    public void say() {
        System.out.println("father say");
    }
    public static void main(String[] args) {
        Father son=new Son();
        son.say();
    }
}
class Son extends Father{
    public void say() {
        System.out.print("son say()");
    }
}
父类对象的引用指向的是一个子类,所以打印方法也会是子类的方法。但是有的使用向上转型会丢掉子类特有的方法。

 

2、向下转型:使用向下转型必须使用(类型)进行强制转换

父类 对象1=new 子类();
子类 对象2=(子类)对象1;
public static void main(String[] args) {
        //向上转型
        Father son=new Son();
        //向下转型
        Son son2=(Son)son;
        son.say();
    }

这是因为父类对象不能直接强转成子类对象。在实际开发中,凡是用到继承,我们应
该会第一想到使用向上类型转换。
现将向上转型总结如下。
(1)父类引用指向子类对象,子类引用不能指向父类对象。
(2)把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型,如
Father fl=new Son()
(3)把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转
型。如fl就是一个指向子类对象的父类引用,把fl赋给子类引用s1即Son sl= (Son)fl。
其中,f1前面的(Son)必须添加,进行强制转换。
( 4)upcasting会丢失子类特有的方法(下面有说明),但是子类overriding父类的方
法,子类方法有效。

 

posted @ 2020-07-28 19:51  yasai  阅读(76)  评论(0编辑  收藏  举报