java知识学习19-继承

面向对象的三大特征:封装、继承、多态

继承:主要解决的问题就是“共性抽取”。

  设计原则:对于已投入使用的类,尽量不要修改。推荐定义一个新的类,来重复利用其中的共性内容,并添加改动新内容。

  继承特点:1、子类可拥有父类中所有非私有的属性与方法;2、子类也可拥有自己独有的属性与方法;3、子类通过关键字extends来继承父类

格式:public class 子类名称 extends 父类名称 { ......}

注:1、在继承关系中,若成员变量重名,则子类创建对象时,有两种访问方式。

    直接通过子类对象访问成员变量:等号左边是谁,就优先用谁,没有则向上找。 如:Zi zi = new Zi(); zi.num;这里用的是优先子类,若子类没有num则找父类的

    间接通过成员方法访问成员变量:该方法属于谁,就优先有谁,没有则向上找;若方法也重名,则等号左边是谁就优先用谁。 如:Zi zi = new Zi(); zi.method(); 这里优先用子类的。

  2、若成员方法重名,访问规则:创建对象的是谁,就优先用谁,如果没有则向上找。

  注意:无论成员变量或方法,若没有都是向上找父类,不会向下找子类。

  

当父类和子类的成员变量、子类的局部变量都重名的情况下,使用不同方式访问。

  

重写:在继承关系中,父子的方法名一样,参数列表也一样。

  重写(override)与重载(overload)的区别:

    重写:方法名一样,参数列表也一样。也叫覆盖、覆写

    重载:方法名一样,参数列表不一样。

  重写注意事项:

    1、必须保证父子类之间方法名一样,参数列表也一样。

      @Override:该注解写在方法前面,可用来检测方法是不是正确覆盖,提高代码正确性。不写也不影响,只要重写正确。

    2、子类方法的返回值必须小于等于父类的返回值范围。 (返回值范围可根据引用类型继承关系判断)

      扩展:java.lang.Object类是所有类的基类,及祖宗类。

    3、子类方法的权限必须大于等于父类方法的权限修饰符。

      扩展:public > protected > (default) > private。 注:default不是关键字,是什么都不写,留空就好。

    

  super关键字:可理解为代表父类对象,通过该关键字可实现父类方法重写简化 。

    

继承中的构造方法:

  1、子类构造方法当中有一个默认隐含的“super();”调用,所以一定是先调用父类的构造方法,后执行子类的构造方法。

  2、子类构造方法可以通过super关键字调用父类重载构造方法。

  3、super的父类构造调用,必须是子类构造方法的第一个语句。一个子类构造不能多次super父类构造。

  总结:子类必须调用父类的构造方法,不写则默认隐含的super();写了则用指定的super调用,super只能有一个,且还必须是第一个。

    

super关键字的三种用法:

  

this关键字的三种用法:

  

this与super内存图解:

继承的三个特点:

  1、Java语言是单继承的。即一个类的直接父类只能有唯一一个。

  2、Java语言可以多级继承。如:A继承B,B又继承C,...,即A的间接父类C

  3、一个子类的直接父类是唯一的,但一个父类可以拥有多个子类。

原文地址:https://www.cnblogs.com/blogofzxf/p/13488663.html