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

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

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. Python之爬虫(二十一) Scrapy爬取所有知乎用户信息(下)

    在上一篇文章中主要写了关于爬虫过程的分析,下面是代码的实现,完整代码在:https://github.com/pythonsite/spider items中的代码主要是我们要爬取的字段的定义 cla ...

  2. Python Ethical Hacking - Basic Concetion

    What is Hacking? Gaining unauthorized access. Hackers? 1.Black-hat Hackers 2.White-hat Hackers 3.Gre ...

  3. 文件传输协议---TFTP

    简介 TFTP协议全称为简单文件传输协议,是以UDP为基础的应用层协议,主要用于不同设备之间的文件传输.具有协议简单,易于实现的特点,常用于嵌入式设备开发中. 传输模式 数据的存储有不同的格式,磁盘中 ...

  4. java基础知识--入门程序说明

    ①main方法:称为主方法,写法格式固定,是程序的入口或起始点,无论我们编写多少程序,JVM在运行的时候,都会从main方法这里开始执行. ②注释:对代码的解释说明.单行注释//.多行注释/* */. ...

  5. linq介绍及工作中应用两例——左联与内联,linq循环方法

    目录 1 linq介绍 1.1 linq产生背景 1.2 linq使用范围 1.3 linq核心程序集 1.4 linq架构图 1.5 linq使用形式对比 1.5.1 linq To Objects ...

  6. 《闲扯Redis七》Redis字典结构的底层实现

    一.前言 上节<闲扯Redis六>Redis五种数据类型之Hash型 中说到 Hash(哈希对象)的底层实现有: 1.ziplist 编码的哈希对象使用压缩列表作为底层实现 2.hasht ...

  7. 2.pandas的数据结构

    对于文件来说,读取只是最初级的要求,那我们要对文件进行数据分析,首先就应该要知道,pandas会将我们熟悉的文件转换成了什么形式的数据结构,以便于后续的操作 数据结构 pandas对文件一共有两种数据 ...

  8. python基础--python基本知识、七大数据类型等

    在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1)python应用领域 目前Python主要应用领域: 云计算: 云计算最火的语言, ...

  9. Ansible部署zabbix-agent

    playbook目录 zabbix/ ├── hosts ##定义的主机列表 ├── install_zabbix_agent.yml ##安装入口文件 └── roles ├── install_z ...

  10. ffmpeg获取视频封面图片

    ffmpeg百度云盘下载地址:https://pan.baidu.com/s/1Am_x0abBvXTrbCFPHs5e9Q 提取码:4y2r /** * ffmpeg百度云盘下载地址:https:/ ...