继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

文章目录

  • 一、简要介绍
  • 二、继承的类型
  • 三、继承实例
  • 四、访问父类成员
    • 1、访问成员变量
      • 1.1 变量名不同
      • 2.2 变量名相同
    • 2、访问成员方法
      • 2.1 方法名不同
      • 2.2 方法名相同
  • 五、子类的构造方法

一、简要介绍


生活中的事物举例:

  • 《游戏人生 零》和《让子弹飞》都属于电影,《扫黑风暴》和《西游记》都属于电视剧
  • 电影电视剧都属于影视作品
  • 虽然《游戏人生 零》和《让子弹飞》都属于电影,但是两者又有很多的区别,所以子类具有父类的一般特性并且具有自身的特性。

继承的格式

class 父类{}
class 子类 extends 父类{}

继承机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。

二、继承的类型


下图摘自菜鸟教程:

三、继承实例


下面以动物类来举例:

  • 狗:属性(品种、名字、颜色),方法(吃、睡、叫)
  • 猫:属性(品种、名字、颜色),方法(吃、睡、叫)
//Dog.java
public class Dog {private String breed;private String name;private String color;public void eat(){System.out.println("吃饭ing");}public void sleep(){System.out.println("睡觉ing");}public void bark(){System.out.println("汪汪汪ing");}
}
//Cat.java
public class Cat{private String breed;private String name;private String color;public void eat(){System.out.println("吃饭ing");}public void sleep(){System.out.println("睡觉ing");}public void mew(){System.out.println("喵喵喵ing");}
}

观察上述代码发现,有很多属性和方法是重复的,把这些共性提取出来,实现代码的复用便是继承完成的事情。

父类又称作基类、超类。子类又称作派生类。

重新改写代码

//Dog.java
public class Dog extends Animal{public void bark(){System.out.println("汪汪汪ing");}
}
//Cat.java
public class Cat extends Animal{public void mew(){System.out.println("喵喵喵ing");}
}
//Animal.java
public class Animal {String breed; //品种String name; //名字String color; //颜色public void eat(){System.out.println("吃饭ing");}public void sleep(){System.out.println("睡觉ing");}
}
//测试
public class Test {public static void main(String[] args) {Dog dog = new Dog();Cat cat = new Cat();dog.breed = "拉布拉多"; //继承的成员变量cat.breed = "英短";System.out.println(dog.breed);dog.eat(); //继承的方法dog.bark();System.out.println(cat.breed);cat.sleep(); //继承的方法cat.mew();}
}


子类继承父类之后必须要添加特有的成员,体现出与父类的不同,否则就没有必要继承了。

四、访问父类成员


1、访问成员变量

1.1 变量名不同

//Father.java
public class Father {int a = 10;int b = 20;
}
//Son.java
public class Son extends Father{int c = 30;public void method(){System.out.println("a = " + a); //访问继承的aSystem.out.println("b = " + b); //访问继承的bSystem.out.println("c = " + c); //访问子类自身的c}
}

2.2 变量名相同

//Father.java
public class Father {int a = 10;int b = 20;
}
//Son.java
public class Son extends Father{char a = 'a'; //同名不同类型int b = 50; //同名相同类型public void method(){System.out.println("a = " + a); //会打印父类还是子类的a值?System.out.println("b = " + b); }public static void main(String[] args) {Son son = new Son();son.method();}
}
//Test.java
public class Test {}


最后输出的均是子类中的值,因为成员变量的访问遵循就近原则,优先在子类中找,没有了再去父类中找。

2、访问成员方法

2.1 方法名不同

//Father.java
public class Father {public void method1(){System.out.println("Father.method1");}
}
//Son.java
public class Son extends Father{public void method2(){System.out.println("Son.method2");}public void method3(){method1();method2();}public static void main(String[] args) {Son son = new Son();son.method3();}
}


注:方法名不同直接调用即可。 在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时再到父类中找,如果父类中也没有则报错。

2.2 方法名相同

//Father.java
public class Father {public void method1(){System.out.println("Father.method1");}public void method2(){System.out.println("Father.method2");}
}
//Son.java
public class Son extends Father{//同名,不同参数列表public void method1(String str){System.out.println("Son.method1-"+str);}//同名,相同参数列表public void method2(){System.out.println("Son.method2");}public void method3(){method1("访问父类");method1(); //通过不同的参数列表访问父类method2(); //直接访问只能访问到子类super.method2(); //使用super关键字进行访问}public static void main(String[] args) {Son son = new Son();son.method3();}
}

五、子类的构造方法


子类对象构造时,需要先调用基类构造方法,然后执行子类的构造方法。(没有爸爸,哪里来的儿子)

//父类
public class A {public A(){System.out.println("A.A");}
}
//子类
public class AA extends A{public AA(){System.out.println("AA.AA");}
}
//测试类
public class Test {public static void main(String[] args) {AA aa = new AA();}
}


在构造子类对象时,先要将从父类继承下来的成员初始化完整,然后再初始化子类自己新增加的成员。
注:

  • 若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构
    造方法。
  • 如果父类构造方法是带有参数的,此时编译器不会再给子类生成默认的构造方法,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。
  • 在子类构造方法中,super调用父类构造时,必须是子类构造函数中第一条语句。
  • super只能在子类构造方法中出现一次,并且不能和this同时出现(都要求是第一条语句,没法实现

子类对象在构建时,先调用子类构造方法,再通过子类构造方法中的默认的super调用父类构造方法,再返回子类

注: 未完,接下篇

Java——继承(一)相关推荐

  1. java继承详解加练习题

    继承 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 继承的好处 提高了代码的复用性(多个类相同的成员可以收到同一个类中) 提高了代码的维护性 ...

  2. java继承对象转换_java 继承的基础(转)

    java 继承的基础(转)[@more@]继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类.运用继承,你能够创建一个通用类,它定义了一系列相关项目的一般特性.该类可以被更具体的类继承,每 ...

  3. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  4. Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常

    Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并处理异常 参考文章: (1)Java继承Exception自定义异常类教程以及Javaweb中用Filter拦截并 ...

  5. java 继承类 变量、静态变量、构造函数执行顺序

    java 继承类 变量.静态变量.构造函数执行顺序 Java代码   class C{ static int prt(int i){ System.out.println(i); return i; ...

  6. Java继承时构造函数的关系

    Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...

  7. java继承关键字super_java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

  8. Java:继承之super关键字,继承之私有权限,继承之方法重写,继承之object类,继承之简单工厂模式

    一.继承的概念及用法       继承背后的思想就是        基于已存在的类来构建新类         当从已存在类继承时,就重用了它的方法和属性,还可以添加新的方法和属性来定制新类以应对需求 ...

  9. Java继承Thread类创建多线程

    Java继承Thread类创建多线程 单线程示例 示例,Example01.java public class Example01{public static void main(String[] a ...

  10. 「万字图文」史上最姨母级Java继承详解

    原创公众号:「bigsai」 除公众号以外拒绝任意擅自转载 文章收录在bigsai公众号和回车课堂 课程导学 在Java课堂中,所有老师不得不提到面向对象(Object Oriented),而在谈到面 ...

最新文章

  1. O’Reilly发布“微服务成熟度状态”报告:微服务是成功的
  2. 4米乘以12米CAD图_CAD做钣金件展开的原理你知道吗?
  3. index.dat文件剖析
  4. 把女友升级为老婆的时候发生的BUG(二)
  5. PHP中如何判断属性类型,php – 如何获取doctrine实体属性的类型
  6. 内核aio_linux内核aio功能
  7. C++基础教程之注释
  8. Android 系统开发系列一
  9. Java 集合系列Stack详细介绍(源码解析)和使用示例
  10. Atitit http2 新特性
  11. java只对_只对你情有独钟:写给Java的情诗
  12. 《艾恩ASP文件上传类》开发和使用总结
  13. 现代操作系统 第十章 UNIX、Linux 和 Android 下
  14. GIS - 百度地图 城市中心点坐标
  15. 计算机组成原理实验二八位寄存器,计算机组成原理课后参考答案
  16. 路由器WiFi密码更改及隐藏操作
  17. 利用Canvas在浏览器上绘制复杂图形,比如:绘制一件衣服,绘制一条围巾,现阶段研究成果
  18. 机械键盘知识漫谈(一)- 初级篇
  19. react-native引入react-native-vector-icons
  20. 微型计算机显示器的标准接口,显示器原理及接口显示器BIOS编程I(原理部分)

热门文章

  1. windows电脑使用Edge浏览器过程中偶发自动重启
  2. 性能测试的常见瓶颈分析及调优方法
  3. c语言数据结构--图
  4. c 中空格的asc码表_C语言常用转义字符表 和 ASCII码表完整版
  5. 自动驾驶路径规划五大常用算法(Dijkstra/人工势场/图搜索等)
  6. 一个 TCP 连接可以发多少个 HTTP 请求
  7. 【电气专业知识问答】问:为何直流系统要装设绝缘监察装置?如何配置?
  8. Redshift还原SP效果 - SP贴图导出设置及贴图导入配置
  9. 使用STM32 ST-LINK Utility下载程序教程
  10. 秦嘉哲:11.9黄金原油晚间行情趋势分析及欧美盘最新操作建议