继承是面向对象的核心特征之一,是由已有类创建新类的机制。利用继承机制,可以先创建一个具有共性的一般类,然后根据该一般类创建具有特殊性的新类,新类继承一般类的属性和方法,并根据需要增加自己的新属性和方法。类的继承机制是面向对象程序设计中实现软件可重用性的重要手段。

  由已有类定义新类,已有类称为父类或超类,新类称为子类或派生类。通过继承机制,子类拥有父类所有的成员变量和成员方法,子类中既可以定义新的属性和方法,也可以对父类中的成员变量和成员方法进行改进,使类的功能得以扩充。

1.继承的实现

  ①、子类的声明,eg:

public class Dog extends Animal{
private String color; //新加的属性
private String kinds; public void sleep(String color, String kinds){
System.out.println("颜色为:" + color + ",种类为:"+ kinds + "的狗正在睡觉!!!" ); //新加的方法
}
}

   如上面所示:Dog类继承Animal类,那么Animal即为父类,Dog类即为子类,Dog类也将拥有父类Animal的所有成员变量和方法。

  ②、继承的原则

  Java语言中继承机制的原则如下:

    A:Java是单继承的,一个类只能继承一个父类。

    B:子类继承父类的实例变量和类变量(静态变量)。

    C:子类继承父类除构造方法以外的实例成员和类方法(静态方法)。

    D:子类不能继承父类的构造方法,因为父类的构造方法用来创建父类对象,子类需要声明自己的构造方法,用来创建自己的对象。

    E:子类可以重新声明父类的成员。

  ③、子类对父类成员的访问权限

  子类虽然继承了父类的成员变量和成员方法,但并不是对父类所有的成员变量和成员方法都具有访问权限,即并不是在自己声明的方法中都能够访问父类的所有成员变量或成员方法。Java中子类访问父类成员的权限如下:

    A:子类对父类的private成员没有访问权限。子类方法中不能直接引用父类的private成员变量,不能直接调用父类的private方法,但可以通过父类非private成员方法访问父类的成员变量。

    B:子类对父类的public和protected成员具有访问权限。

    C:子类对父类的默认权限成员的访问权限分为两种情况:对于同一个包中的父类默认权限成员具有访问权限,对其他包中父类的默认权限成员没有访问权限。

  类中成员的访问权限体现了类封装的信息隐藏原则,如果类中成员仅限于该类使用,则声明为private;如果类中成员允许子类使用,则声明为protected;如果类中成员允许所有类访问,则声明为public。

  根据一个案例来理解继承,eg:

package extendsExample;

/**
*
* @author JackW
*
*/
public class Animal { //私有属性
private String type;
private String breed;
private String name; //构造方法
public Animal(String type, String breed, String name) {
super();
this.type = type;
this.breed = breed;
this.name = name;
} //自我介绍方法
public void introduce(){
System.out.println("主人好,我是" + this.type +",我的品种是" + this.breed + ",我的名字叫:" + this.name);
} //叫声方法
public void sound(){ }
}
package extendsExample;

/**
*
* @author JackW
*
*/
public class Cat extends Animal{
//子类构造函数
public Cat(String breed, String name){
//调用父类构造函数
super("猫", breed, name);
}
}
package extendsExample;

/**
*
* @author JackW
*
*/
public class Dog extends Animal{ //子类构造函数
public Dog(String breed, String name){
//调用父类构造函数
super("狗", breed, name);
}
}
package extendsExample;

/**
*
* @author JackW
*
*/
public class PetShop { public static void main(String[] args) {
// TODO Auto-generated method stub
Cat cat = new Cat("波斯猫", "花花"); //定义猫对象cat
Dog dog = new Dog("金毛", "芋头"); //定义狗对象dog cat.introduce(); //猫调用自我介绍方法
dog.introduce(); //狗调用自我介绍方法
} }

  从上面的代码可以看出,Animal为父类,Cat类和Dog类为子类,父类中定义所有子类公共的属性和方法,不需要每个子类都再次的写一遍。

  说明:

    A:main()方法中的猫类对象cat和狗类对象dog都可以调用introduce()方法,但是Cat类和Dog类都未定义introduce()方法,这是因为Cat类和Dog类从父类Animal类中继承introduce()方法。

    B:super 是Java的关键字,表示调用父类成员;this也是Java的关键字,表示调用当前类的成员。

  ④、super 和 this 引用

  子类可以使用super关键字引用父类的成员变量,成员方法及构造方法。

    A:引用父类成员变量

    eg:super.成员变量名;

  当子类中没有申明与父类同名的成员变量时,引用父类的成员变量可以不使用super 关键字;但当子类中声明了与父类同名的成员变量时,为类引用父类的成员变量,必须使用super 关键字,否则引用的是子类中同名的成员变量。

    B:调用父类成员方法

  子类自动继承父类所有的成员方法,可以使用以下方式调用父类的成员方法:

  eg:super.成员方法(参数列表);

  当子类中没有声明与父类同名且参数列表也相同的成员方法时,调用父类的成员方法可以不使用super 关键字;当子类中声明了与父类同名且参数列表也相同的成员方法时,为了调用父类的成员方法,必须使用super 关键字,否则调用的是子类中同名且参数列表也相同的方法。

    C:调用父类的构造方法

  在子类构造方法中,可以通过super 关键字调用父类构造方法,其调用形式如下:

  eg:super(参数列表);

  此处的参数列表由父类方法的参数列表决定,并且super()必须是子类构造方法体中的首条语句。

  ⑤、继承中的构造函数调用次序

  实例化子类对象时,先调用子类构造函数,在调用父类构造函数。父类构造函数对属性进行初始化后,子类再对子类属性进行初始化。

  ⑥、继承中的实例化

  实例化子类对象时,先实例化父类对象,后实例化子类对象,也就是说,实例化子类对象时,父类对象也被实例化了。

2.Object 类

  在Java中,java.lang.Object 类是所有类的父类,当一个类没有使用 extends 关键字显式继承其他类时,该类默认继承 Object 类,因此所有类都是 Object 类的子类,都具有 Object 类的方法和属性。

Java基础—继承的更多相关文章

  1. 《Java基础——继承》

    Java基础--继承     一.类的继承: 规则: 1.一个子类只能有一个父类,但一个父类可以有多个子类,每个子类都可以作为父类使用. 2.若一个类没有声明父类,则默认其父类为Object. 3.父 ...

  2. Java 基础 - 继承

    子类继承父类的private字段么? Oracle的Java Documentation对Inheritance的定义: 很直白,定义里面就告诉你了这不叫继承.继承的意思是你可以对其进行直接的调用和修 ...

  3. java基础-继承

    浏览以下内容前,请点击并阅读 声明 一个由其他类继承的类叫子类(也叫继承类,扩展类等),该类继承的类叫父类或超类.除了Object类意外,所有的类都有切仅有一个父类,如果一个类没有用extends关键 ...

  4. java基础-继承:矩形体积类问题

    28.按要求编写一个Java应用程序: (1)定义一个类,描述一个矩形,包含有长.宽两种属性,和计算面积方法. (2)编写一个类,继承自矩形类,同时该类描述长方体,具有长.宽.高属性, 和计算体积的方 ...

  5. Java基础--继承方法调用顺序

    最近因为面试的原因,回过头来复习基础的知识,都忘光了,准备买本面试书回来啃. 我先把自己测试的结论总结写出来,以后忘记再来看看 如果b类继承自a类,在main方法中new出b的对象(不带参数),那么他 ...

  6. JAVA基础--继承和权限控制

    1. extends继承 2. java只支持单继承,不允许多继承 修饰符 类内部 同一个包 子类 任何地方 private YES       default YES YES     protect ...

  7. Java基础——继承

    学习Java继承之前,我们想回忆一下Java面向对象需要特别注意的几个关键点. 面向对象是将复杂的事情简单化了,它通过封装的方式使得代码的重用性更高和安全性更强.平时我们要学会用面向对象的方式去思考, ...

  8. Java基础---继承、抽象、接口

    一.概述         继承是面向对象的一个重要特征.当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可.这时,多个类可以称为子类,单 ...

  9. java基础继承

    为什么用继承: 因为继承可以减少代码的冗余,提高维护性,为了从根本上解决存在的问题,就需要继承,就是将多个类当中的相同的地方提取到一个父类当中.父类更通用,子类更具体. 父类的继承格式 语法:publ ...

  10. 古典音乐 (java基础 继承)

    摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 一.前言 小朽不才,最近爱上了听古典音乐收录了,mozart ,贝多芬… ...

随机推荐

  1. unity-TextAsset

    定义: 当把Text files导到unity,将会变成TextAsset. 支持的格式: .txt .html .htm .xml .bytes .json .csv .yaml .fnt 注意 不 ...

  2. C#程序安装为windows服务的方式

    项目开发中,需要将采集程序以windows服务的形式进行部署,可分为定时采集程序以及监控采集程序. 1.定时采集程序 采用Quartz.net框架实现定时任务,针对该种情形,可采用批处理文件的形式进行 ...

  3. Controller怎么接收Ajax传来的data

    var json = { "VendorId": strVendorId, "VendorName": strVendorName, "Remark& ...

  4. java的干儿子锁Lock

    目录 Lock的由来 线程之间的交互 Lock方法简介 lock() lockInterruptibly() trylock() trylock(long,TimeUnit) unlock() new ...

  5. void operator()()的功能

    在学习多线程的时候看到这样的一段代码,为什么要重载()呢?真有这个必要吗? #include <iostream> #include <thread> class Counte ...

  6. 使用 maven 创建项目模板

    前言 配置 demo 工程 生成模板 生成项目 上传模板到仓库 参看链接 前言 微服务的概念越来越流行,随着服务粒度越来越细,拆分的模块越来越明确,我们的工程项目也变得越来越多. 有时候一个项目搭建, ...

  7. 架构师都该懂的 CAP 定理

    面对可能出现的网络延迟,不可预估的请求流量等情况,设计一个分布式系统,我们通常围绕系统高可用,数据一致性的目标去规划和实现,想要完全实现这个目标,却并非易事.由此,分布式系统领域诞生了一个基本定理,即 ...

  8. Java中Map的entrySet()详解

    转发:原博客 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系.Map中采用Entry内部类来表示一个映射项,映射项包含Key和ValueMap.Entry里面包含getKey() ...

  9. u盘安装 osx 出现 “不能验证”

    关于安装是出现关于出现“不能验证”错误: 解决办法 :打开终端 在"终端"里面修改时间 输入:date 032208102015.20

  10. ELasticSearch(五)ES集群原理与搭建

    一.ES集群原理 查看集群健康状况:URL+ /GET _cat/health (1).ES基本概念名词 Cluster 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产 ...