【Java基础学习笔记】9、多态

 多态是同一个行为具有多个不同表现形式或形态的能力。
 如同一台打印机,它既可以是黑白打印机,用来打印黑白照片,也可以是彩色打印机,用来打印彩色照片。都是“打印”这个动作,放在两台不一样的打印机上,就会产生不一样的结果——黑白或彩色的照片。多态也是一样,同一个行为在不同的对象身上就会产生不同的作用。
 多态存在的三个必要条件:继承、重写、向上转型。


继承

 顾名思义,要完成多态,必须要存在类的继承关系

重写

 在有继承关系的情况下,子类必须重新定义父类中的某些方法。前两点之前都总结了一下:
【Java基础学习笔记】6、类和接口(继承和抽象类)

向上转型

 在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法,这个过程被称为向上转型,即从更小范围的子类实例化更大范围的父类对象。这是自动转换,即可以直接写。
格式:
 父类 对象名 = new 子类
代码示例:

public class Javasample {
    public static void main(String[] args) {
        Printer b=new MonochromePrinter();
        Printer c=new ColorPrinter();
        b.print();
        c.print();
    }
}
class Printer{
	//父类
    public void print(){
        System.out.println("打印照片");
    }
}
class MonochromePrinter extends Printer{
    //子类1
    public void print(){
    //重写print()方法
        System.out.println("打印黑白照片");
    }
}
class ColorPrinter extends Printer{
    //子类2
    public void print(){
    //重写print()方法
        System.out.println("打印彩色照片");
    }
}

结果如下:
在这里插入图片描述

向下转型(扩展,非多态的内容)

 向下转型与向上转型相对,即从更大范围的父类实例化更小范围的子类对象,属于强制转换,即需要加强制转换语句。
格式:
 子类 对象名 = (子类)父类对象
代码示例:

public class Javasample {
    public static void main(String[] args) {
        change(new MonochromePrinter());
        change(new ColorPrinter());
    }
    public static void change(Printer p){
    //进行判断
        if(p instanceof MonochromePrinter){
        //强制转换
            MonochromePrinter m=(MonochromePrinter)p;
            m.print();
            m.run();//调用子类特有方法
        }
        else if(p instanceof ColorPrinter){
        //强制转换
            ColorPrinter c=(ColorPrinter)p;
            c.print();
            c.run();//调用子类特有方法
        }
    }
}
class Printer{
    public void print(){
        System.out.println("打印照片");
    }
}
class MonochromePrinter extends Printer{
    public void print(){
        System.out.println("打印黑白照片");
    }
    public void run(){
    //子类特有的方法
        System.out.println("黑白打印机正在运行");
    }
}
class ColorPrinter extends Printer{
    public void print(){
    //子类特有的方法
        System.out.println("打印彩色照片");
    }
    public void run(){
        System.out.println("彩色打印机正在运行");
    }
}

结果如下:
在这里插入图片描述
注意!: 不论是向上转型还是向下转型,编译看左边,运行看右边。 new谁就调用谁的方法。
instanceof关键字
 对象名 instanceof 类名
 如果相符,返回true,否则返回false

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值