Java面向对象之继承、多态(重写方法、abstract、final)

一、继承的优点和实现方法

   1. 语法:修饰符 子类名 extends 父类{    }

    若修饰符是public,则该类在整个项目中可见;若无public修饰符,则该类只在该包可见

    在定义一个类时,没有使用extends关键字,那么这个类直接继承Object类

所有对象都继承这个类的方法。

   2.继承的内容

        2.1继承public和protected修饰的属性和方法,无论子类和父类是否在同一个包中。

        2.2继承默认权限的属性和方法,但是,子类和父类必须在同一个包中

        2.3无法继承private中的属性和方法。

        2.4无法继承父类的构造方法。

   3.子类重写父类方法

       在子类中根据需求对父类继承的方法进行重写,称为方法的重写或方法的覆盖。

       3.1重写的前提是:当从父类继承的方法中不能满足子类的需求,则在子类中可以对父类的同名方法进行重写(调用会覆盖父类的同名方法)。

        3.2方法重写必须满足的条件

        1.重写方法和被重写的方法必须具有相同的方法名、相同的参数列表

        2.重写方法的返回值类型必须和被重写方法的返回值类型相同或是其子类

        3.重写方法不能缩小被重写方法的访问权限。

二、重载和重写有什么区别和联系

    1.重载涉及同一个类中的同名方法,参数列表不同。

    2.重写涉及的是子类和父类之间的同名方法,参数列表相同,返回值类型相同。

三、super

    super代表对当前对象的直接父类对象的默认引用

    如果子类想调用父类被重写的方法

    1.super必须出现在子类中。

    2.可以访问父类的成员(父类的属性、方法、构造方法)

    3.super无法访问private。

四、继承构造方法

   1.java继承中,执行子类的构造方法之前。如果没有显式的super调用,也没有通过this显式调用自身的其他构造方法,那么就是默认调用父类无参。 其目的是为了帮助继承自父类的成员作初始化操作。 
    2.首先子类中的方法必须调用父类的构造方法,如果父类中只有一个有参的构造方法,你在子类的构造方法必须调用,而且是子类的构造方法第一句话必须是调用父类的有参构造方法,否则编译器会提示错误的。如果父类中有无参的构造方法,你没有写的话会自动调用的。
    3.如果子类的构造方法中通过super显式调用父类的有参构造方法,则执行父类相应的构造方法,而不执行父类的无参构造。

所以,super();//调用父类的无参构造,只能在有参构造的第一行。

    4.如果存在多级继承则会多次向更高一层调用,一直执行到顶级父类Object类的无参构造方法。

    5.Java方法的参数传递方式只有一种:值传递,即将实参的副本传递给方法,参数本身不发生任何变化。

五、抽象类abstract

    1.抽象类和方法

    有一个方法为抽象方法则该类就改为抽象类。

    抽象类中可以有抽象方法

    抽象方法没有方法体(大括号也没有),语法:访问修饰符 返回值类型 方法名();

    2.abstract

    2.1abstract 可以修饰类和方法,不能修饰属性和构造方法。

    2.2abstract不能与final、static、private共存。

        原因:1.    final修饰的类和方法不能再次更改,所以不能重写。

                  2.    static修饰的方法、属性,随着类的加载而创建,但是abstract是dynamic的,必须通过继承或接口来实现。

                  3.    private只能在类内部调用,重写时访问不到。

六、多态

    1.多态意味着在一次方法调用中是根据包含的对象实际类型,来决定调用哪个方法,不是由存储对象引用的变量类型决定的。

    为了得到多态的操作,这个方法既要在父类中声明过,也必须是子类中重写过的方法。

    2.向上转型:

    一个父类引用指向子类对象,称为向上转型(自动类型转换)。

    通过父类引用变量调用的方法,是子类重写后的方法,不是父类方法。

    通过父类引用无法调用子类特有的方法。

    3.向下转型:

    当向上转型完成后,无法调用子类特有的方法,如果需要调用子类特有的,可以通过向下转型实现。

    

猜你喜欢

转载自blog.csdn.net/pojpoj/article/details/80752158