Java多态的学习

1:什么是多态?
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
多态性是对象多种表现形式的体现。
事物在运行过程中存在不同的状态。
多态是同一个行为具有多个不同表现形式或形态的能力。
嗯~ o( ̄▽ ̄)o有点难懂
在这里插入图片描述
看了图应该会好理解一点,同样是打印这个行为,然后却有彩色与黑白两种表现形式。
这下应该初步懂了是个什么了吧。
进一步呢,多态又分为 编译时多态和运行时多态。
编译时多态:比如重载
运行时多态:比如重写
2:多态存在的三个必要条件
继承、重写、基类引用指向派生类对象,即父类引用指向子类对象:Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
代码例子:

class Shape {
    void draw() {}
}
 
class Circle extends Shape {
    void draw() {
        System.out.println("Circle.draw()");
    }
}
 
class Square extends Shape {
    void draw() {
        System.out.println("Square.draw()");
    }
}
 
class Triangle extends Shape {
    void draw() {
        System.out.println("Triangle.draw()");
    }
}

多态的优点:
分析以上代码可以知道:同样是draw这个行为,我可以通过调用Circle.draw()、Square.draw()、Triangle.draw()来实现三种不同图形的绘制,从而实现了实现类的自动切换,所以多态的好处体现在:可以使我们的程序编写的更简单,并有良好的扩展性。
多态的缺点:
不能使用子类特有的成员属性和子类特有的成员方法。

//改写上述代码的Triangle类
class Triangle extends Shape {
    void draw() {
        System.out.println("Triangle.draw()");
    }
    void fillColor(){
      System.out.println("Triangle.fillColor()");
    }
}
/**
 * 测试多态的弊端!
 */
public class Demo {
    public static void main(String[] args) {
		Shape shape = new Triangle();

        shape.draw();

        shape.fillColor();//编译报错,编译看左边,Shape没有这个方法
    }
}

可以看到Circle类和Square类、Triangle类有个共同的draw方法,但是呢,Triangle类多了个fillColor的方法。而对于Shape对象来说,它本身类没有fillColor的方法,所以它的编译就直接没有通过了!也就代表着,父类无法调用子类独有的方法。所以就有了“向下转型”的出现

3:多态的实现方式
方式一:重写:

方式二:接口:
1.生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。
2. java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。

方式三:抽象类和抽象方法
4:多态的定义与使用格式
定义格式:父类类型 变量名=new 子类类型();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值