多态

一、啥是多态?
1、多态是指想同类型的变量、调用同一方法时呈现出多种不同的行为特征(引用变量在编译时的类型和运行时的类型不同就会发生多态);
2、多态通常出现在存在继承关系的类中;
3、例如:

public class BaseClass {

    public int book = 10;
    public void base(){
        System.out.println("父类的普通方法!");
    }

    public void test(){
        System.out.println("父类将会被覆盖的方法!");
    }
}

class SubClass extends BaseClass{

    //重新定义book实例变量隐藏父类的book变量
    public String book = "书籍";

    @Override
    public void test(){
        System.out.println("子类覆盖父类的test方法");
    }
    public void sub(){
        System.out.println("子类的普通方法!");
    }

    public static void main(String args[]){

        //创建一个BaseClass的实例,引用变量bc的编译时的类型和运行时类型相同,不存在多态
        BaseClass bc = new BaseClass();
        System.out.println(bc.book);  //将会输出10
        //下面调用的两个方法将会执行父类(BaseClass)的方法
        bc.base();
        bc.test();

        //创建一个SubClass的实例,引用变量sc的编译时的类型和运行时类型相同,不存在多态
        SubClass sc = new SubClass();
        System.out.println(sc.book);  //将会输出“书籍”
        sc.base();//将调用父类的base方法
        sc.test();//由于子类(SubClass)重写了父类的test方法,所以,此处将会调用子类的test方法

        //此处polymorphic编译时的类型和运行时的类型不同,多态发生
        BaseClass polymorphic = new SubClass();//此处将会自动发生向上转型
        //Java允许把一个子类对象直接赋值给一个父类的引用变量,无须转型,称之为向上转型,与此相对的还有向下转型

        System.out.println(polymorphic.book);//将会输出10,由于对象的实例变量不具备多态性
        polymorphic.base();//执行父类BaseClass的base方法
        polymorphic.test();//将会执行子类SubClass的test方法,由于子类的额test方法将父类的test方法覆盖了

        //由于polymorphic编译时是BaseClass类型,而sub()是属于子类SubClass的方法,
        // BaseClass中不存在Sub()方法,编译不能通过,故下一行代码将会报错
        //polymorphic.sub();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值