java基础十二 面向对象特点_继承
2017-04-05 19:06
281 查看
java中,为了让类与类之间产生关系,就有继承这么一说,继承也是面向对象的三大特点之一
继承的好处是:
提高了代码复用性,维护性,它让类与类之间产生了关系(这也是多态的前提)
继承的缺点是:
增强了类之间的耦合性(耦合性其实就是类与类之间的关系,我们平时开发的原则是高内聚,低耦合;这里的内聚就是某个类自己完成某件事情的能力)
继承的特点:
java中只支持单继承,不支持多继承(有个很形象的例子,单继承可以体现为:一个儿子只能有一个爹)
java支持多层继承(比如A继承B,B继承C,这就形成了一个继承体系)
注意:子类中只能继承父类的所有非私有成员,子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法
继承什么时候用?
如果有两个类A和B,当符合A是B的一种或者B是A的一种时,就可以考虑使用继承,其实继承体现的就是一种"is a"的关系
继承时子类和父类成员变量的区分:
子类和父类的变量不同名时,就没有影响,该用什么用什么
子类和父类的变量同名时,使用就近原则,子类有就不用父类的了
继承时子类和父类方法的区分:
子类和父类方法不同名时,该用什么用什么
子类和父类方法不同名时,使用就近原则
this和super两个关键字的区别
注意:
this和super都必须放在构造方法里面的第一条语句
子类中所有构造方法默认都会访问父类中的无参构造器,因为子类继承父类中的数据,可能还会使用父类的数据,所以子类初始化之前一定会初始化父类的数据
其实,每个构造方法前面第一条语句都会是super(不管你有没有写,系统会默认给你加上),如果这个类没有继承任何类,那么他是默认继承Object类的(Object类是所有类的父类)
在java中是分层初始化的,会先初始化父类,在进行子类的初始化
比如:假设有A继承B,现创建A的一个实例 A a = new A();会先将B.class以及A.class分别加载到内存里面,在进行创建对象,创建对象是先初始化B,再初始化A
重写:
字父类出现了一抹一样的方法(返回值类型可以是字父类);
当子类需要父类的功能,而子类在这个功能里面里面有自己的特有内容,这样就可以重写父类方法,既保留了父类的功能,也加入了自己特有内容
方法重写时应该注意:
父类的私有方法子类是不可以重写的(因为父类的私有方法子类根本就无法继承,更别谈重写了)
子类重写父类方法时,访问权限不能更低(最好一致,当然可以比父类更大)
final关键字
final是最终的意思,它修饰的类不可以被继承,修饰的变量就成了常量(只能被赋值一次),他修饰的方法不能被重写
final修饰的局部变量:
如果是基本类型,值就不能改变了
如果是引用变量,就是地址值不能被改变(但是这个变量的属性还是可以改变的)
注意:用final修饰的变量必须显示初始化,或者用构造方法初始化(也就是在对象构造之前就必须初始化)
继承的好处是:
提高了代码复用性,维护性,它让类与类之间产生了关系(这也是多态的前提)
继承的缺点是:
增强了类之间的耦合性(耦合性其实就是类与类之间的关系,我们平时开发的原则是高内聚,低耦合;这里的内聚就是某个类自己完成某件事情的能力)
继承的特点:
java中只支持单继承,不支持多继承(有个很形象的例子,单继承可以体现为:一个儿子只能有一个爹)
java支持多层继承(比如A继承B,B继承C,这就形成了一个继承体系)
注意:子类中只能继承父类的所有非私有成员,子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法
继承什么时候用?
如果有两个类A和B,当符合A是B的一种或者B是A的一种时,就可以考虑使用继承,其实继承体现的就是一种"is a"的关系
继承时子类和父类成员变量的区分:
子类和父类的变量不同名时,就没有影响,该用什么用什么
子类和父类的变量同名时,使用就近原则,子类有就不用父类的了
继承时子类和父类方法的区分:
子类和父类方法不同名时,该用什么用什么
子类和父类方法不同名时,使用就近原则
this和super两个关键字的区别
使用区别 | 调用成员变量 | 调用成员方法 | 调用构造方法 |
this | this. 4000 成员变量调用本类的成员变量,如果本类没有,则调用的是父类的成员变量 | this.成员方法可以调用子类或者父类的成员方法 | this()调用的是本类的构造方法 |
super | super.成员变量调用的是父类的成员变量 | super.成员方法调用的是父类成员方法 | super()调用的是父类构造方法 |
this和super都必须放在构造方法里面的第一条语句
子类中所有构造方法默认都会访问父类中的无参构造器,因为子类继承父类中的数据,可能还会使用父类的数据,所以子类初始化之前一定会初始化父类的数据
其实,每个构造方法前面第一条语句都会是super(不管你有没有写,系统会默认给你加上),如果这个类没有继承任何类,那么他是默认继承Object类的(Object类是所有类的父类)
在java中是分层初始化的,会先初始化父类,在进行子类的初始化
比如:假设有A继承B,现创建A的一个实例 A a = new A();会先将B.class以及A.class分别加载到内存里面,在进行创建对象,创建对象是先初始化B,再初始化A
重写:
字父类出现了一抹一样的方法(返回值类型可以是字父类);
当子类需要父类的功能,而子类在这个功能里面里面有自己的特有内容,这样就可以重写父类方法,既保留了父类的功能,也加入了自己特有内容
方法重写时应该注意:
父类的私有方法子类是不可以重写的(因为父类的私有方法子类根本就无法继承,更别谈重写了)
子类重写父类方法时,访问权限不能更低(最好一致,当然可以比父类更大)
final关键字
final是最终的意思,它修饰的类不可以被继承,修饰的变量就成了常量(只能被赋值一次),他修饰的方法不能被重写
final修饰的局部变量:
如果是基本类型,值就不能改变了
如果是引用变量,就是地址值不能被改变(但是这个变量的属性还是可以改变的)
注意:用final修饰的变量必须显示初始化,或者用构造方法初始化(也就是在对象构造之前就必须初始化)
相关文章推荐
- 黑马程序员—— Java 基础 面向对象之继承 (复习)
- Java基础笔记整理---【08】面向对象程序设计-包、继承、访问权限
- JAVA基础学习(七)---面向对象三---继承,接口与 抽象类
- Java基础(极客)——12、Java面向对象基本特征:继承
- 大数据之JAVA基础(六):面向对象--继承
- 【java基础】--(2)面向对象特征之概念、封装、继承
- 黑马程序员--03.Java面向对象--05.【继承】【子父类中成员的特点】【子父类中构造函数的特点】
- JAVA基础(一):面向对象之接口与继承以及子类父类的相互转换
- Java基础视频教程第07天_面向对象之继承、抽象、接口
- 面向对象_Java中类的继承特点
- 跟着姜少学Java基础编程之十二:面向对象-构造方法
- 黑马程序员——Java基础---面向对象代码块和继承和this和super和重写和重载和final
- JAVA基础之面向对象特征:继承
- java学习日记_31:面向对象之继承的概述、使用、特点和弊端
- 黑马程序员----java基础面向对象特点及封装
- JAVA面向对象基础:继承、变量隐藏、方法重写、包、修饰符、this、super
- 黑马程序员—4—Java基础: 面向对象继承学习笔记和学习心得体会
- 《跟我学Java 26日通》第6天面向对象基础(1)
- java面向对象思想之继承、多态
- [零基础学JAVA]Java SE面向对象部分-16.面向对象高级(04) 推荐