Java(一)面向对象--04封装、继承、多态
一、什么是多态
比如需要一个List类,可以实例化:
ArrayList list = new ArrayList();
也可以:
List list = new ArrayList();
若现在的需求是ArrayList已经无法满足,需要更换为LinkedList,如果按照第一种写法,那么你需要做的工作可能比较多,除了修改list的类型,还要考虑的是你换成LinkedList的时候,你之前用ArrayList所调用的方法,LinkedList是否拥有,这无形中增加了许多工作量。
如果按照第二种写法来实现,那么只需改成List list = new LinkedList()即可,无须担心之前所调用的方法。
1、多态的条件:
继承。在多态中必须存在有继承关系的子类和父类。
重写。子类对父类的默些方法重新定义,在调用这些方法的时候就会调用子类的方法。
向上转型。在多态中需要将子类的引用赋值给父类对象,只有这样该引用才能具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能实现多态。
2、典型案例
image.pngpublic void Father(){
fMethod();//...父类的方法,简略写了
}
public void Son extens Father
{
fMethod();//...子类重写的方法,简略写了
}
public class TestExtends{
public static void main(String[] args){
Father f =new Son();
f.fMethod();
}
}
这里动态调用的就是子类的重写方法,如果子类没有重写方法,那就调用的就是父类的方法;
二、方法重载和方法重写
1、方法重载
参数类型必须改变
image.png比如方法名相同,参数相同,返回类型不同,不是重载,编译不通过。
你自己可以设想,如果你调用了这个方法,系统如何判断你到底调用的是带返回值还是不带返回值的方法呢?
2、方法重写
image.png针对第2点,说法不太准确,应该是大于或者等于。如果子去重写父的方法,方法的权限默认是和父一样的,但也可以改,但只能加大权限,不能缩小权限,比如父是protected,子类重写时可以改成public,但如果是public的,重写只能是public。
三、Java的继承与实现
1、继承
继承是单继承
2、接口
image.png四、构造函数和默认构造函数
1、构造函数
image.png如果你想在用有参构造函数的同时又能够用无参的构造函数,你可以显示的声明一个无参的构造函数和一个有参的构造函数,否则无法使用。
五、类变量、成员变量与局部变量
image.pngimage.png image.png image.png