JAVA 面向对象-2-继承(Inheritance)
i.继承(Inheritance)
1.继承的概念
继承:在面向对象编程的过程中,通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类。
继承是面向对象编程最重要的特征之一。
继承的优点:
1). 避免大量的重复代码。
2). 继承是功能的拓展,使得结构清晰。 更容易维护和修改。
父类:之前已有的类,也可以称基类、超类(superClass)
子类:新生的类,也可以叫派生类。
1.子类会继承父类的一切(不包括private修饰的私有类)方法和属性。
2.Java中只能单继承,通过extends进行继承。
测试设计:一个对象有(has a)一个属性,一个对象执行(does)一个行为。
2.使用“is a”关系判断继承
当使用继承时,如果说,子类“is a(是一个)”父类,成立。那么继承关系就是对的。
3.类的继承(extends)
"3W" , "1H":
What:在java中对父类方法和属性的继承 —— 功能拓展
Where:出现大量重复代码的时候
Why:避免大量重复代码,使代码结构清晰,更容易维护和修改。
How: 使用关键字extends继承父类。
1)父类(基类/superClass):为子类提供可继承的属性和方法。
代码示例:
public class Pet {
String name;
int age;
String color;
public Pet(){
System.out.println(处在构造函数中);
}
/**带入参数的形式:
* public Pet(String name){
* System.out.println(name);
* }
*/
public void show() {
}
}
2)子类:子类会继承父类的一切(不包括private修饰的私有类)方法和属性。
代码示例:
public class Cat extends Pet{
public Cat(){
super(); // --------------------- 调用父类的无参构造函数
//或者 super(name); ------------ 调用父类的有参构造函数
System.out.println("喵喵要吃鱼");
}
@Override
public void show(){
System.out.println(name+","+age);
System.out.println("喵喵喵");
}
}
1.Java中只能单继承,通过extends进行继承。
2.如果父类有参数,子类也必须有参数,并返回给父类。否则无法程序执行
3.this();与super(); 是冲突的,它们都必须放在第一行才能生效。
4.单继承与多继承
某些OOP语言,如C++,允许多个继承。
但是Java中只能允许单继承,通过extends进行继承。
所以,每个Java类只有一个父类。
5.所有类的根类
java语言API中有一个特殊类Object,是整个Java类层次中的根类。
Object类是每一个Java类的父类(直接父类或者间接父类)。所以,不管什么类类型,Object中的方法都可以被任何对象调用。
6.方法的重载与重写
1)重载:只与参数的个数和类型有关。构造函数也能重载
代码示例:
public void show(int a){
System.out.println(a);
}
public void show(int a,int b){
System.out.println(a+b);
}
public void show(int a,double b){
System.out.println(a+b);
}
重载可以针对同种行为的不同情况,方便处理。
2)重写:子类可以重写从父类继承的方法,从而允许子类添加或者改变父类中方法的行为,是OOP特征之一。
◇规则:
a. 子类的方法的返回值类型、方法名和形式参数列表,必须和父类相同。
b. 访问修饰符必须不小于父类的访问修饰符。
c. 子类中重写的异常不能抛出比父类更多的异常。
public class Pet {
String name;
int age;
String color;
public Pet(){
System.out.println(处在构造函数中);
}
/**带入参数的形式:
* public Pet(String name){
* System.out.println(name);
* }
*/
public void show() {
}
}
public class Cat extends Pet{
public Cat(){
super(); // ----------------------- 调用父类的无参构造函数
//或者 super(name); ------------ 调用父类的有参构造函数
System.out.println("喵喵要吃鱼");
}
@Override
public void show(){
System.out.println(name+","+age);
System.out.println("喵喵喵");
}
}
1.重写的方法名字和参数必须一模一样。一定发生在父类和子类之间。
2.当父类的方法不适合子类时,就需要重写。
7.super关键字
1)this引用:每个对象都有一个对自身的引用,this引用。
2)super引用:一个类则可以使用super关键字显式引用从父类继承的成员变量和方法。同时如果有参数,会将参数传递给父类。
1.在子类重写父类方法的时候,如果需要调用父类的方法,就需要使用super关键字。
2.this和super关键字都必须写在代码第一行,所以只能选择一个。
8.final关键字
1)final常量:不能修改其中的值。
2)final类:一个类可以声明为最终类。最终类不能被其他类继承。
public final class Dog extends Pet{}
3)final方法:一个方法可以声明为最终方法。最终方法不能被重写。
public class Pet{
String name;
int age;
public final void show(){}
System.out.println(name+“, ”+age);
}
9.实例化的过程
当一个对象被实例化时:
1)new运算符调用子类的构造器
2)子类会用this关键字调用子类的其他构造器。最后,子类中的第一行代码中不是this()的构造器将被调用。
3) 在子类的构造器中的任何语句执行前,父类的构造器必须用super关键字调用。如果没用显式使用super调用,编译器会用super()调用无参数的父类构造器。
4)如果父类也是另一类的子类,那么在父类的构造器中的任何语句执行前,父类构造器必须使用super调用更高一层父类的构造器。
5)本过程继续执行,直到到达类层次树的顶部,即Object类。
6)Object类中的构造器执行,然后控制流程转到继承层次树中Object下面的类的构造器中。
7)构造器沿着继承层次树向下执行,最后一个要执行的构造器,实际上是第一步中先调用的那个构造器。
在每个构造器中,如果要调用super()或this(),那么调用代码必须是构造器的第一行代码
JAVA 面向对象-2-继承(Inheritance)的更多相关文章
- java面向对象之 继承 Inheritance
对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变量,并且类可以修 ...
- Java面向对象之继承(一)
目录 Java面向对象之继承 引言 继承的特点 语法格式 父子类的关系 继承要点 重写父类方法 继承中的构造器 继承中的super关键字 ... Java面向对象之继承 继承是面向对象的第二大特征,是 ...
- Java笔记(十三)……面向对象III继承(inheritance)
继承概述 继承概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可. 多个类可以称为子类,单独这个类称为父类或者超类. 子类可以直接访 ...
- Java面向对象的继承
继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...
- JAVA面向对象之继承
继承: 子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法 class 子类 extends 父类 { } 继承的特性: 子类拥有父类非private的属性,方法. 子类可以拥有自己 ...
- Java:[面向对象:继承,多态]
本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类( ...
- Java面向对象之继承extends 入门实例
一.基础概念 (一)继承的好处: 1.继承:提高了代码的复用性. 2.让类与类之间产生了关系,给多态这个特征提供了前提. (二)继承的种类: 1.单继承:一个类只能有一个父类. 2.多继承:一个类可以 ...
- Java面向对象_继承——基本概念以及管理化妆品实例分析
一.继承的基本概念: 1.继承是面向对象三大特征之一 2.被继承的类成为父类(超类),继承父类的类成为子类(派生类) 3.继承是指一个对象直接使用另一个对象的属性和方法 4.通过继承可以实现代码重用 ...
- Java面向对象(继承、抽象类)
面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...
随机推荐
- 如何写一个像btgoogle一样的12306泄露数据查询
demo地址:http://www.btgoogle.com/12306/ 圣诞节,12306送给了我们一个大礼物.大约 14w的数据泄露, 看网上都沸沸扬扬的.开始也准备找一个数据库来看看,随后,我 ...
- 重复数据插入unique列时,锁加在哪?
1.测试目的 当插入重复数据到有unique索引的表中时,采用何种加锁机制. 2.测试思路 利用10046确定是什么操作导致加锁阻塞了进程: dump锁定前最近一次操作的块结构来分析加锁机制. 3.测 ...
- CodeFirst数据库迁移小记
打开“程序包管理器控制台”菜单项一.Enable-Migrations -ContextTypeName Code_First_数据迁移.Models.T_DbContext成功后提示:已在项目“Co ...
- jquery插件的写法
jquery插件及zepto插件,写法上有些区别. 区别点: 1.自定义事件的命名空间 jq的时间命名空间是用点“.”,而zepto是用冒号“:” 如 //jquery $(this).trigger ...
- cocos2d-x Tests讲解 Particle System(粒子系统)
转载请注明出处: http://www.cnblogs.com/shangdahao/archive/2012/04/14/2447571.html 一.粒子系统简介: 粒子系统最早出现在80年代,主 ...
- UIApplication 常用方法
下面是这个类的一些功能:1.设置icon上的数字图标 //设置主界面icon上的数字图标,在2.0中引进, 缺省为0 [UIApplicationsharedApplication].applicat ...
- 使用自定义《UIActivity》进行内容分享-b
简介 这段时间有很多朋友都问我关于怎么去集成ShareSDK或者友盟社会化分享SDK的问题, 其实我想说, Apple一开始就提供了一个类, 供我们去使用分享了, 在iOS 6之后更加增强了这个类, ...
- [原博客] POJ 2484 A Funny Game
题目链接题意:有n个硬币排成一圈,两个人轮流操作,每次可以取走一个或者相邻的连个硬币(只算最开始相邻的,取之后才相邻的不算),问先手必胜还是必败. 这个题可以证明若n>=3,则先手必败.对称博弈 ...
- ember.js
http://blog.geoinker.com/2012/12/29/seven-javascript/ http://www.csdn.net/article/2013-04-15/2814893 ...
- 【网络流24题】No.18 分配问题 (二分图最佳匹配 费用流|KM)
[题意] 有 n 件工作要分配给 n 个人做.第 i 个人做第 j 件工作产生的效益为 cij . 试设计一个将n 件工作分配给 n 个人做的分配方案, 使产生的总效益最大. 输入文件示例input. ...