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)的更多相关文章

  1. java面向对象之 继承 Inheritance

    对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派生类可以从它的基类那里继承方法和实例变量,并且类可以修 ...

  2. Java面向对象之继承(一)

    目录 Java面向对象之继承 引言 继承的特点 语法格式 父子类的关系 继承要点 重写父类方法 继承中的构造器 继承中的super关键字 ... Java面向对象之继承 继承是面向对象的第二大特征,是 ...

  3. Java笔记(十三)……面向对象III继承(inheritance)

    继承概述 继承概述 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可. 多个类可以称为子类,单独这个类称为父类或者超类. 子类可以直接访 ...

  4. Java面向对象的继承

    继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...

  5. JAVA面向对象之继承

    继承: 子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法 class 子类 extends 父类 { } 继承的特性: 子类拥有父类非private的属性,方法. 子类可以拥有自己 ...

  6. Java:[面向对象:继承,多态]

    本文内容: 继承 多态 首发时期:2018-03-23 继承: 介绍: 如果多个类中存在相同的属性和行为,可以将这些内容抽取到单独一个类中,那么多个类(子类)无需再定义这些属性和行为,只要继承那个类( ...

  7. Java面向对象之继承extends 入门实例

    一.基础概念 (一)继承的好处: 1.继承:提高了代码的复用性. 2.让类与类之间产生了关系,给多态这个特征提供了前提. (二)继承的种类: 1.单继承:一个类只能有一个父类. 2.多继承:一个类可以 ...

  8. Java面向对象_继承——基本概念以及管理化妆品实例分析

    一.继承的基本概念: 1.继承是面向对象三大特征之一 2.被继承的类成为父类(超类),继承父类的类成为子类(派生类) 3.继承是指一个对象直接使用另一个对象的属性和方法 4.通过继承可以实现代码重用 ...

  9. Java面向对象(继承、抽象类)

    面向对象 今日内容介绍 u 继承 u 抽象类 第1章 继承 1.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成 ...

随机推荐

  1. MySQL事务隔离级别初探

    MySQL有四种隔离级别,分别是: READ UNCOMMITTED(未提交读) READ COMMITTED(提交读) REPEATABLE READ (可重复读) SERIALIZABLE(可串行 ...

  2. windows下Apache配置SSL安全连接

    什么是SSL? SSL(Secure Socket Layer): 是为Http传输提供安全的协议,通过证书认证来确保客户端和网站服务器之间的数据是安全.Open SSL下载地址:http://www ...

  3. Mac下安装Scrapy

    执行 sudo pip install Scrapy 时会碰到libxml/xmlversion file no found 解决方法: brew install libxml2 brew insta ...

  4. PHP源码阅读笔记一(explode和implode函数分析)

    PHP源码阅读笔记一一.explode和implode函数array explode ( string separator, string string [, int limit] )此函数返回由字符 ...

  5. uva 812 Trade on Verweggistan

    题意: 给w个货架, 每个货架上有bi个货物, 每次只能拿最上面的货物, 每个货物有个价值, 所有货物的售价均为10. 问:能获得的最大利润, 以及能获得这个利润需要多少个货物. (有多种组合时只需输 ...

  6. JS代码判断IE6,IE7,IE8,IE9的函数代码

    JS代码判断浏览器版本,支持IE6,IE7,IE8,IE9!做网页有时候会用到JS检测IE的版本,下面是检测Microsoft Internet Explorer版本的三种代码 做网页有时候会用到JS ...

  7. 矩阵分解(rank decomposition)文章代码汇总

    矩阵分解(rank decomposition)文章代码汇总 矩阵分解(rank decomposition) 本文收集了现有矩阵分解的几乎所有算法和应用,原文链接:https://sites.goo ...

  8. 【HDU 1133】 Buy the Ticket (卡特兰数)

    Buy the Ticket Problem Description The "Harry Potter and the Goblet of Fire" will be on sh ...

  9. Java RMI远程方法调用

    RMI(远程接口调用) 1. RMI的原理: RMI系统结构,在客户端和服务器端都有几层结构. 方法调用从客户对象经占位程序(Stub).远程引用层(Remote Reference Layer)和传 ...

  10. [cocos2d]场景切换以及切换进度显示

    本文主要分两个部分叙述,第一是场景切换,第二是场景切换的进度显示. 一.场景切换 参考learn-iphone-and-ipad-cocos2d-game-development 第五章内容 coco ...