继承是:多个类有重复内容,把重复内容放到一个新类中,就可以通过extends关键词去让原来的类和新类产生继承关系,子类只能拿到父类一部分信息。通过extends关键词去指明类与类之间的关系,一个父类可以有多个子类,一个子类只能有一个父类即单继承

首先我们会有一种情况我们定义几个类但是这几个类内容相似有重复,比如下列代码中的age,name,job

  1. public class Public {
  2. public static void main(String[] args) {
  3.  
  4. }
  5.  
  6. }//endclass
  7.  
  8. class girl{
  9. int age;
  10. String name;
  11. String job;
  12. public void Can_PlayFootball()
  13. {
  14. System.out.println("我是女生但是能踢足球");
  15. }
  16. }
  17. class Boy{
  18. int age;
  19. String name;
  20. String job;
  21. public void Can_PlayGame()
  22. {
  23. System.out.println("我是男生打游戏");
  24. }
  25.  
  26. }

这个时候我们就想用一个公有类存放类都有属性代码修改如下

  1. public class Public {
  2. public static void main(String[] args) {
  3.  
  4. }
  5.  
  6. }//endclass
  7. class Person{
  8. int age;
  9. String name;
  10. String job;
  11. }
  12. class girl extends Person{
  13.  
  14. public void Can_PlayFootball()
  15. {
  16. System.out.println("我是女生但是能踢足球");
  17. }
  18. }
  19. class Boy extends Person{
  20. int age;
  21. String name;
  22. String job;
  23. public void Can_PlayGame()
  24. {
  25. System.out.println("我是男生打游戏");
  26. }
  27.  
  28. }

此时Person就是基类 或者父类和超类   Boy和Girl就是子类也叫派生类

继承的注意点

1.方法的重写:当子类和父类的方法签名一样的方法,运行的就是子类的方法

方法重写原则---两等两小一大 :1.父类的方法的方法签名和子类的方法的方法签名要一致

2.如果父类的方法返回值数据类型是基本类型/void,子类要和父类一致

3.如果父类的方法返回的是引用类型,那么子类的方法返回值要么和父类一致要么是其子类。

4.子类抛出编译时异常小于等于父类方法抛出的编译时异常,子类方法可以抛出很多的异常,只要不超过父类方法的异常就好,以父类最大范围的异常为基准,不看个数只看异常,而运行时异常不影响我们的重写

5.访问权限修饰符 子类的方法的访问修饰符范围要大于等于父类 的方法

如果父类的方法用private 修饰,这个方法就是私有的,对子类不可见,子类继承不到

父类构造方法子类也是继承不到,构造代码块也是一样

如果父类的方法用protected修饰的,子类对象要在当前子类的本类中去使用,调用方法。

super关键词--代表父类对象的引用  super() 语句也要放在首行 和this()语句一样,所以this()语句和super语句两者不能显示的同时出现 ,可以一同出现的时候是在构造函数第一行写this(),所有的子类的构造方法默认调用父类的无参构造方法 。默认有super()语句。两者同时存在了。如果父类没有默认的构造方法,子类所有的构造方法需要通过super语句去调用对应形式的父类构造。

调用父类的方法的时候 如果是非静态的方法需要由对象调用 那么就可以是super.sleep();调用父类的sleep()方法。

那么这时候就有一个问题 父类对象和子类对象谁现出现?

子类对象的产生是调用子类的构造方法,如果类中没有构造方法,就会默认添加一个无参构造。

子类的构造方法默认含有一个调用父类构造的语句 super(); 然后调用父类的构造方法,产生父类的对象

如果父类提供了有参构造函数,无参构造函数没有了,那么子类所有的构造方法都要去调用其他形式的父类构造方法

  1. class Person{
  2. public Person(int age) {
  3.  
  4. }
  5. int age;
  6. String name;
  7. String job;
  8. }
  9. class girl extends Person{
  10.  
  11. public girl() {
  12. super(10);
  13. }
  14.  
  15. }
  16. class Boy extends Person{
  17. public Boy() {
  18. super(10);
  19. }

因此父类对象一定比子类对象先创建

那么父类和子类谁先出现的呢

这个要分两个方面 1.思想层面:父类是提取子类的公有特征组成的一个类,这么看的话应该是先有多个子类从而根据公有特征得到父类。

2.代码层面: 子类对象再创建的时候会优先创建父类构造方法,所以应该是父类先出现

从不同的层面来讲有不同的结果,所以面试的时候最好都讲到。

20面向对象三特征 之继承 方法重写 super的更多相关文章

  1. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  2. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  3. Objective-c 类的继承 方法重写 方法重载

    一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. Obje ...

  4. 面向对象三大特征之继承(extends)——Java笔记(六)

    继承:            从一般到特殊的关系,是一种拓展关系,子类对象是父类的一种,也可称为”is a“的关系 泛化:         把子类里的共性抽取到父类里的来的过程 特化:         ...

  5. 05 面向对象:构造方法&static&继承&方法 &final

    构造方法及其重载: /* 构造方法格式特点 * a:方法名与类名相同(大小也要与类名一致) * b:没有返回值类型,连void都没有 * c:没有具体的返回值return; * 构造方法的重载 * 重 ...

  6. 乐字节Java继承|方法重写、super和final关键字

    大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...

  7. PHP学习笔记5-类的继承/方法重写

    更改Man.php文件名为People.php,加入代码: public function hi(){ return $this->_name.' say hi'; } 新建文件Man.php: ...

  8. Java面向对象系列(9)- 方法重写

    为什么需要重写? 父类的功能,子类不一定需要,或者不一定满足 场景一 重写都是方法的重写,和属性无关 父类的引用指向了子类 用B类新建了A类的对象,把A赋值给了B,这时候B是A,A又继承了B类,向上转 ...

  9. JAVA 面向对象 三大特征:继承

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

随机推荐

  1. 关于追踪qemu 源码函数路径的一个方法

    这阵子一直在研究qemu 磁盘io路径的源码,发现直接看代码是意见非常低效率的事情,qemu是一个比较庞大的家伙(源码部分大概154MB,完全由C语言来完成),整个结构也都非常地复杂,所以从代码上研究 ...

  2. BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图

    BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图 Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2, ...

  3. BZOJ_2286_[Sdoi2011]消耗战_虚树+树形DP+树剖lca

    BZOJ_2286_[Sdoi2011]消耗战_虚树+树形DP Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的 ...

  4. 第十六周 Leetcode 600. Non-negative Integers without Consecutive Ones(HARD) 计数dp

    Leetcode600 很简单的一道计数题 给定整数n 求不大于n的正整数中 二进制表示没有连续的1的数字个数 在dp过程中只要保证不出现连续1以及大于n的情况即可. 所以设计按位dp[i][j]表示 ...

  5. UI:数据的解析XML与JSON

    XML  和  JSON 语言  本篇博客来自互联网参考 XML 和 JSON 的互相转化 有属性的转化为对象,无属性的转化为字符串 节点的顺序性不可逆,XML有顺序,JSON 无顺序 XML 和 J ...

  6. poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】

    扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...

  7. Ocelot(十)- 路由

    Ocelot的主要功能是接收传入的http请求并将其转发到下游服务.Ocelot目前仅以另一个http请求的形式支持此功能(将来可能是任何传输机制). Ocelot描述了将一个请求路由到另一个请求作为 ...

  8. A joke about regular expression

    As the old computer science joke goes: “Let’s say you have a problem, andyou decide to solve it with ...

  9. python网络爬虫之二requests模块

    requests http请求库 requests是基于python内置的urllib3来编写的,它比urllib更加方便,特别是在添加headers, post请求,以及cookies的设置上,处理 ...

  10. multiset || 线段树 HDOJ 4302 Holedox Eating

    题目传送门 题意:一个长度L的管子,起点在0.n次操作,0 p表示在p的位置放上蛋糕,1表示去吃掉最近的蛋糕(如果左右都有蛋糕且距离相同,那么吃同方向的蛋糕),问最终走了多少路程 分析:用multis ...