Java 继承学习
Java 继承
继承实现:
在Java中,如果实现继承的,需要使用Java关键字——extends :
被继承的类叫做超类,继承超类的类叫子类。(一个子类亦可以是另一个类的超类)
class 子类 extends 父类 { …… } |
子类也可以被成为“派生类”,父类也被称为基类(超类)
子类继承父类后,子类中可以随便的调用父类定义的属性、方法等。
class Person { private String name ; private int age ; private String school ; public void setName (String name) { this.name = name ; } public setAge(int age) { this.age = age ; } public String getName() { return this.name ; } public int getAge() { return this.age ; } } public Student extends Person { // Student继承了父类Person /* Student 可以使用 Person 中定义的属性和方法 */ }
同时,子类中也可以定义新的属性和方法
class Person { private String name ; private int age ; public void setName (String name) { this.name = name ; } public setAge(int age) { this.age = age ; } public String getName() { return this.name ; } public int getAge() { return this.age ; } } public Student extends Person { // Student继承了父类Person private String school ; public void setSchool (String school) { this.school = school ; } public void getSchool () { return this.school ; } }
实现继承功能:
子类可以直接将父类的操作继续使用,属于代码重用 ;
子类可以扩充定义新的属于子类的属性和方法,不改变父类原有的结构标准 ;
l 在父类中被定义为private属性的内容不可以被子类调用
继承的限制:
利用extends关键字,在大多数的i情况下不用考虑继承限制的问题;
针对于继承也有继承的要求:
1、 Java不允许多重继承。一个子类不可继承多个父类;一个子类只有一个父类,一个子类则可以是一个被继承的父类。Java不允许多继承,若想实现一个子类实现继承多个父类的功能,可以采用多层继承,即B继承A,C继承B 就实现了C继承了A和B类的功能(没有继承层数限制,但不易超过三层)。
2、 子类在继承父类的时候,严格来讲会继承父类的全部操作;但对于Private(私有)操作属于隐式继承,非私有性操作属于显式继承。【在外部调用子类时候,可以使用子类继承的父类private属性,但式在子类中则不可以使用自己继承的private属性——“只可以间接的使用子类继承父类的private私有属性,属于隐式继承,而可以直接使用子类继承父类的非私有属性,属于显式继承” 】(super)
3、 在子类对象构造之前,一定会默认调用父类的无参构造,以保证父类的对象先实例化,而后在实例化子类对象 ; 对于子类构造而言,就相当于隐含了一个“super()”——父类中没有无参构造方法,就必须在子类中使用 super() 明确调用父类的有参构造方法。【通过super()将父类需要的构造参数传给父类】super()主要作用是由子类调用父类的构造方法,故此,super必须放在子类构造方法的首行(和this()不能同时出现;且子类构造实例化前一定先实例化父类构造)
super()和this()问题研究:
1、 super(参数):调用基类(父类)中的某一个构造函数(默认)
2、 this(参数):调用本类中的另一种形成的构造函数
3、 super()和this()都在构造函数第一行,但不可以同时存在
4、 super:引用当前对象的直接父类的成员(用来访问父类中的隐式继承属性和方法函数)
5、 this:表示引用当前对象名
— this()和super()都要在构造函数的首行。
最新文章
- 使用django开发博客过程记录2——博客首页及博客详情的实现
- css定位和浮动
- CentOS最大文件描述符限制更改
- jquery submit()不执行
- CSS 和 JS 文件合并工具
- Aquarium Filtration
- psutil模块安装指南(win与linux)
- x-debug配置简述 - chunyu
- Spring事务传递性探讨
- 比较三个 CSS 预处理器:Sass、LESS 和 Stylus(下)
- Nginx Rewrite详解
- 深度学习识别CIFAR10:pytorch训练LeNet、AlexNet、VGG19实现及比较(三)
- 文件上传控件bootstrap-fileinput的使用
- mybatis根据数据库表结构自动生成实体类,dao,mapper
- ans Single VIP LLB and SLB config
- python多继承中子类访问祖先类的同名成员
- UIAlertController简单使用
- sass的加减乘除
- bloomfilter 以及count min sketch
- Visual Studio 2017 取消 break mode
热门文章
- CodeForces 289B Polo the Penguin and Matrix (数学,中位数)
- git的使用和一些命令
- 【Windows】ASP.NET Core 部署到 IIS
- 设计模式8---适配器模式(Adapter)
- Java对称加密算法
- ARM汇编程序中的伪指令
- 负载均衡-会话保持,session同步(转载)
- tcxgrid控件中drag a column header here to group by that column移除方法
- Rabbimq必备基础之对高级消息队列协议AMQP分析及Rabbitmq本质介绍
- Nagios+InfluxDB+Grafana