继承和多态是面向对象开发语言中非常重要的一个环节,若使用得当,整个程序的架构将变得非常有弹性,同时可以减少代码的 冗余性。
继承的概念
在已经存在的类的基础上进行扩充和改造,形成一个新的类。满足“is a”的关系就是继承
eg:
父类 :Animals。有name 和age 属性,提供set和get方法。
子类:Bird 。Bird中增加了color属性,提供set和get方法。
两者都是继承于Animals。
![8948318-035b3efbcfe24861.png](https://i-blog.csdnimg.cn/blog_migrate/35e9f21ffedb552fccb2442b187f3b93.webp?x-image-process=image/format,png)
Bird类
![8948318-b924704708cf74bc.png](https://i-blog.csdnimg.cn/blog_migrate/e9737e14e849765f8baf77f55540571d.webp?x-image-process=image/format,png)
Text类和结果
![8948318-4b571813e761decf.png](https://i-blog.csdnimg.cn/blog_migrate/fdefe9eea5b15c264e6cc061306143cb.webp?x-image-process=image/format,png)
Bird继承了Animals类,并且满足“is a ”的关系,鸟事动物,这样的逻辑是对的,并且在Animals的基础上增加了新的属于它自己的属性——color。
Animals提供了构造方法,则在Bird的构造方法中必须显性的调用父类的构造方法,而且必须在 第一行。
子类若要调用父类的方法,可以有super.方法名调用。
Object类------java中万物之祖。
java中的每一个类都有一个父类,有的显性的表示,有的则隐性表示,但都是继承一Objec,他是所有java类的父类。
多态的概念
多态是一种事务,多种形态。用名字一样的代码根据要求的不同,干不一样的事情。
分类
1:对象的多态。(父对象引用指向子类实例)
2:方法的多态。(分为方法的重载和重写或者覆盖)
对象的多态。
![8948318-0dbde88317afad4c.png](https://i-blog.csdnimg.cn/blog_migrate/0b62bdec486952c214175518b11839b7.webp?x-image-process=image/format,png)
若在子类中重写了父类的方法,则通过对象的多态调用的是子类中重写的方法。
方法的多态
1 : 方法的重载
重载是发生在同一类中,函数的名字相同,但是函数的参数个数,和参数类型,只要不一样,就是重载。
![8948318-6c7b880e94ba8e0d.png](https://i-blog.csdnimg.cn/blog_migrate/ca05e7afb923601e1c2dd1179788ad3a.webp?x-image-process=image/format,png)
函数重写。
重写发生在两个类中,父类的方法,在子类中重新写。
重写的函数名字和参数列表完全一样。
重写的函数只能抛出比之前更小的异常。访问权限只能比之前的更大。
eg:animals 类中写了eat() 方法,接下来在子类中重写此方法。
![8948318-87d51ed800a295c8.png](https://i-blog.csdnimg.cn/blog_migrate/a97f7089fc0ab7eb21905c07c25ef288.webp?x-image-process=image/format,png)
重写的函数前加@Override 标示。
前面讲的对象的多态里面,父类对象指向子类实例,只能调用父类和子类中相同的方法,子类中新添加的方法并不能调用,若要调用就要有强制类型转换。
![8948318-5c1a3355501dd539.png](https://i-blog.csdnimg.cn/blog_migrate/00a9f3634f3977d2dc680606a47b830a.webp?x-image-process=image/format,png)
这样父类对象就可以调用子类的方法了,
难道说所有的类型都可以相互转换的吗?
不是,只有继承关系的对象之间才可以相互转换.
![8948318-ce5cc34a0b65cba2.png](https://i-blog.csdnimg.cn/blog_migrate/83f7eec58eb07f74fdaff86766a29de4.webp?x-image-process=image/format,png)
![8948318-0d36937e08803337.png](https://i-blog.csdnimg.cn/blog_migrate/40c4c8196946efdc732d85b59d28cb4e.webp?x-image-process=image/format,png)
instanceof 判断左边的元素是不是等号右边的实例.
写的有点乱,大家多批评改正,感谢。