java-多态的一些概念

多态

polymorphism即多种形态,模糊策略,以不变应万变,使用多态可以编写更加通用的代码。多态是建立在继承和重写的基础上,是一个运行期的动态绑定行为。

要发生多态有三个必要条件:要有继承,要有重写,父类引用指向子类对象

4 based

1)、继承链,自己没有找父亲
2)、编译看类型+确定方法表,运行找对象
3)、就近最优原则:自己没有才找父亲
4)、发生多态,父类对子类的新增方法不可见

extends关键字

继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。同时使用继承可以提高代码的复用性。(事实上,利用组合可以更好的实现代码复用!)extends的意思是“扩展“。子类是父类的扩展。

实际作用中是为了实现,实现代码的复用,延续+扩展父类信息。

即通过继承,子类自动拥有了基类的所有成员(成员变量和成员方法)。

ips:Java只支持单继承,不允许多继承:一个子类只能拥有一个直接基类,但是一个基类可以派生出多个子类

1
<modifier> class <name> [extends<superclass>] {...}

重写@Override

父类方法不满足子类的要求,按需改写。注意方法签名必须相同

两个类中存在父子关系,保持方法名必须相同,参数列表不能满足子类需求的时候,进行改写,参数列表也必须相同==。当子类重写父类的某个方法之后,通过子类调用该方法,一定调用的是重写之后的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
class F{
int test(int a){
return a*100;
}
}

@Override
class C{
//重写
public int test(int a){
return a*100*100
}
}

注意属性不会重写,以下方法不会重写

1、静态方法不会重写,父类为静态,子类只能为静态,否则编译错误,只是可以在子类中出现和父类相同的方法,但不是重写,不能加@Override注解

2、final修饰方法否则编译错误

3、私有方法不会重写,只是可以在子类中出现和父类相同的方法,但不是重写,不能加@Override注解

Object继承链

Object类是所有Java类的根基类
如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类

1
2
3
public class Person{...}
//等价于;
public class Person extends Object{...}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!