java继承 多态
来源:互联网 发布:单片机音乐代码生成器 编辑:程序博客网 时间:2024/06/08 14:24
1. 继承:
(1)子类的构造方法一定会调用父类的构造方法。
(2)任何子类构造方法第一行肯定是this();或者super();两个择一。
this();调用本类的其它构造方法。(传递相应参数调用相应的方法)
super();调用父类的构造方法。
(3)如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
---子类创建实例对象的时候必须调用父类(抽象类)的构造方法。
(4)如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错
(5)构造方法不能继承:子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法
(6父类构造方法:子类的构造方法必须调用父类的构造方法!
子类和抽象类:
(1)父类是抽象类,实例化一个子类,如果子类的构造方法没有显示的用super或者this,则会用默认的this来调用父类的无参的构造方法,而且这
个是子类的构造方法中首先执行的方法,即首先调用父类的构造方法,接着再调用子类的构造方法。
(2)如果在子类的实例中调用了父类的方法,而这个方法子类中没有重写,则会去调父类中的那个方法;如果子类重写了则调用的就是子类的方法。
(3)如果在父类中调用了父类的抽象方法,则默认的会去调用子类中已经实现了这个抽象方法的子类方法。
2. 覆盖:
子类覆盖父类前提:
(1) 同名,同参数列表,同返回类型。
(2) 子类覆盖后的方法的访问权限只能比父类相同或者更宽广。
(3) 子类覆盖后的方法抛出的异常不能比父类更宽广。
(4) is-a:指继承。
has-a:指类实例具有对另一个实例的引用。
(5) 对于继承关系:当子类的对象来调用父类中的方法时,则执行的是父类只中原有的方法,
这和多态不一样,如果子类覆盖掉父类的这个方法时,则调用的是子类的这个方法。
(6)继承中注意的问题:
重写(也叫覆盖,也叫重构):重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;
重写方法不能使用比被重写方法更严格的访问权限。
重写是类与类之间的关系,两者必须是继承关系。重载是方法与方法之间的关系。
3. 多态:
(1) 前提:把子类对象当成父类对象来看。
(2) 把子类对象当成父类对象来看时:只能调用父类中定义的属性和方法。
(3) 把子类对象当成父类对象来看时:如果子类覆盖了父类中的方法,则调用的
是子类覆盖后的这个方法。
但是如果调用属性时是调用父类的属性而并非子类的,所以尽量不要定义
父子类同名的属性。
(4) 把父类强制转换成子类时,则调用的是子类中的方法。
(1)子类的构造方法一定会调用父类的构造方法。
(2)任何子类构造方法第一行肯定是this();或者super();两个择一。
this();调用本类的其它构造方法。(传递相应参数调用相应的方法)
super();调用父类的构造方法。
(3)如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
---子类创建实例对象的时候必须调用父类(抽象类)的构造方法。
(4)如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错
(5)构造方法不能继承:子类继承父类所有的成员变量和成员方法,但不继承父类的构造方法
(6父类构造方法:子类的构造方法必须调用父类的构造方法!
子类和抽象类:
(1)父类是抽象类,实例化一个子类,如果子类的构造方法没有显示的用super或者this,则会用默认的this来调用父类的无参的构造方法,而且这
个是子类的构造方法中首先执行的方法,即首先调用父类的构造方法,接着再调用子类的构造方法。
(2)如果在子类的实例中调用了父类的方法,而这个方法子类中没有重写,则会去调父类中的那个方法;如果子类重写了则调用的就是子类的方法。
(3)如果在父类中调用了父类的抽象方法,则默认的会去调用子类中已经实现了这个抽象方法的子类方法。
2. 覆盖:
子类覆盖父类前提:
(1) 同名,同参数列表,同返回类型。
(2) 子类覆盖后的方法的访问权限只能比父类相同或者更宽广。
(3) 子类覆盖后的方法抛出的异常不能比父类更宽广。
(4) is-a:指继承。
has-a:指类实例具有对另一个实例的引用。
(5) 对于继承关系:当子类的对象来调用父类中的方法时,则执行的是父类只中原有的方法,
这和多态不一样,如果子类覆盖掉父类的这个方法时,则调用的是子类的这个方法。
(6)继承中注意的问题:
重写(也叫覆盖,也叫重构):重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型;
重写方法不能使用比被重写方法更严格的访问权限。
重写是类与类之间的关系,两者必须是继承关系。重载是方法与方法之间的关系。
3. 多态:
(1) 前提:把子类对象当成父类对象来看。
(2) 把子类对象当成父类对象来看时:只能调用父类中定义的属性和方法。
(3) 把子类对象当成父类对象来看时:如果子类覆盖了父类中的方法,则调用的
是子类覆盖后的这个方法。
但是如果调用属性时是调用父类的属性而并非子类的,所以尽量不要定义
父子类同名的属性。
(4) 把父类强制转换成子类时,则调用的是子类中的方法。
4. 静态方法不能叫"多态".
this的用法:
this._ (区分局部变量与全局变量,有重名时用)
this(参数类表)
super的用法:
super._(区分子类与父类同名属性,以后建议不要定义相同的同名属性)
super(参数列表)
写一个类时,同时顺手的要加上一个无参的构造方法,有其它类继承它时,系统会自动加上super();但父类如果没有无参的构造方法就会报错。
覆盖(重写)和重载的区别:
覆盖:(1) 是父子类之间.
(2) 父子类同名,相同的参数列表,相同的返回类型。
(3) 子类访问的权限比父类要高。
(4) 子类抛出的异常比父类小。
重载:(1) 多数针对一个类.
(2) 方法名相同,参数列表不同,与返回类型无关。
(3) 也可能出现在父子类中。
(4) 一般会想到构造函数,有无参的构造函数,一个参数的,两个参数的。
多态的优点:代码复用;灵活性;添加新的子类而不会影响原始类的特性;可扩充。多态其实也是一种分离变化与不变的手段,复合Java的设计原则和设计模式。
多态实现机理:动态绑定。在运行时才会知道对象的实际类型,在运行时才知道要调用的方法,极大增加灵活性。动态绑定与对象在堆中表示有关。如果将对象的public类型方法使用方发表组织,通过方法表得知具体调用谁的和哪个方法。对private、final和static方法是静态绑定就是在编译时期就知道调用方法的具体类型。此处只限方法不能是属性。
0 0
- Java类、继承、多态
- JAVA 继承、多态
- JAVA 封装, 继承, 多态
- JAVA-day04-继承、多态
- java 接口,继承,多态
- Java继承 封装 多态
- JAVA 封装 继承 多态
- Java-继承、多态
- java 重载、继承、多态
- JAVA封装,继承,多态
- JAVA 封装、继承、多态
- Java接口 继承 多态
- java封装、继承、多态
- java继承 多态
- java-继承 多态 抽象
- Java继承、多态
- java学习:继承、多态、instanceof
- Java中的继承、封装、多态
- Python index 编写和编码格式
- Retrofit封装和使用
- Activity四种启动模式
- MacBook上Visual Studio Code开发AngularJS2 之 HelloWorld
- virtualenv的使用
- java继承 多态
- VSCode从非根目录编译golang程序
- 安卓几种图片加载框架的比较
- 物体检测及分类
- CSS第一天
- 编译报错:Duplicate Symbols for Architecture arm64
- 添加VLC模块
- java实现凯撒密码简单破解
- 表达式计算