面向对象基础9(继承)

封装、继承、多态是面向对象的三大特征

继承的理解

苹果(类)继承了水果(类)

老虎(类)继承了动物(类)

  • Java的继承是类与类之间的关系

  • 是一种由一般到特殊的关系(与现实中的辈分没有关系,所以子类和父类名字并不准确)

——小类(子类)是一种特殊的父类(大类)

子类的实例完全可当做父类的实例来使用

别称

父类(超类、基类、大类);子类(派生类、小类)

继承的语法

修饰符 class 类名 extends 父类

{代码块}

说明:

Java是单继承的,所以,一个子类只能继承一个父类

若不显示继承父类,Java会默认继承Object

——一切皆Object!

举例:

public class A {}
class B extends A{}
class C extends B{}
//C的直接父类是B;Object、A是C的间接父类(我附庸的附庸不是我的附庸...)
//A的直接子类是B,间接子类是C

继承的作用:

子类继承父类,就可以直接使用父类的方法成员变量

举例1:

public class Bird {public void fly(){System.out.println("Birds Flying");}
}
class Sparrow extends Bird{}
//此处Sparrow类继承Bird类,Sparrow类并没有写任何方法但继承了Bird类的方法
public class SparrowTest {public static void main(String[] args) {Sparrow sp=new Sparrow();sp.fly();}
}
/*
Birds Flying
*/

继承的优点是可以实现代码的复用

方法重写

存在意义

当子类发现父类的方法不适合自己的时候,就需要重写方法

规则

两同两小一大:

两同:方法名相同、形参列表相同;

两小:返回值类型相同或者更小,声明抛出的异常相同或者更小;

一大:访问权限相同或者更大

举例2:

public class Ostrich extends Bird{//重写fly方法@Overridepublic void fly(){System.out.println("can not fly");}
}
public class OstrichTest {public static void main(String[] args) {Ostrich A=new Ostrich();A.fly();}
}
/*
can not fly
*/

此时原有的fly方法被重写

注解@Override——用于报错,要求被修饰的方法必须重写父类方法,否则就报错(方法拼写错误);

Super关键字

this引用很相像,super可以用于限定访问父类的实例变量和实例方法。

super.父类的实例变量

super.父类的实例方法(参数)

例3:

class Base {int age=2;
}
class Sub extends Base{int age =20;public void test(){int age=200;System.out.println(age);System.out.println(this.age);//调用该类中的成员变量System.out.println(super.age);//调用父类中的成员变量public void names(String name){System.out.println("执行父类"+name);}}
}
public class SubTest {public static void main(String[] args) {Sub A=new Sub();A.test();}
}
/*
200
20
2
*/

例3改:

class Base {int age=2;
}
class Sub extends Base{public void test(){System.out.println(age);System.out.println(this.age);System.out.println(super.age);}//此处删除了原有的局部变量与子类中的成员变量
}
public class SubTest {public static void main(String[] args) {Sub A=new Sub();A.test();}
}
/*
2
2
2
*/

从上面两个例子可以看出:

变量的调用遵循就近原则,输出的age变量优先调用所属方法的局部变量,若局部变量不存在,其次考虑所属类的实例变量(此处是子类),最后考虑其父类的实例变量。

thissuper关键字再次就是为了打破就近原则,调用所需要的变量。

class Base {public void names(String name){System.out.println("执行父类"+name);}
}
class Sub extends Base{public void names(String name){System.out.println("执行子类"+name);}public void test(){names("Java");/*此处等同于this.names("Java");等同于Base.names("Java");类方法需要类来调用,默认添加类名*/super.names("Java");}
}
public class SubTest {public static void main(String[] args) {Sub A=new Sub();A.test();}
}
/*
执行子类Java
执行父类Java
*/

此时带有super关键子的names方法会打破就近原则,执行父类的原有方法。

子类调用父类的构造器

子类的构造器一定要调用父类的构造器一次(有且仅有一次)

  1. 如果子类构造器没有显示调用父类构造器,系统会在子类构造器的第一行自动调用父类无参数的构造器;

  2. 子类构造器的第一行显示使用super调用父类构造器:super()

    super和this关键字不顾能出现在同一语句

例5:

package Super关键字;
class Fruit{private double weight;public Fruit(double weight){this.weight=weight;}
}
public class Apple extends Fruit {public Apple() {super(2.2);//常识调用父类Fruit的double构造器}
}

备注:如果父类没有无参构造器——则子类构造器必须显示调用(super调用,如上例)父类的构造器

面向对象基础9(继承与继承语法)相关推荐

  1. Java面向对象——基础2 封装、继承、多态

    目录 Java基础知识图解 一.方法的重载 1.1重载是什么? 1.2重载的例子 1.3判断重载练习 1.4重载小结 1.5可变个数的形参 ​说明: 二.方法参数的值传递机制 2.1基本数据类型的参数 ...

  2. Java基础【之】面向对象编程(封装、继承(extends、方法重写、super)、多态(动态绑定、重载/重写)、代码实现)

    Java基础[之]面向对象编程(封装.继承.多态.代码实现) 1.封装 2.继承 2.1.extends 2.2.方法重写 2.3.super 3.多态 3.1.对象的多态.方法的多态 3.2.动态绑 ...

  3. 面向对象基础、面向对象的三大特征(封装、继承、多态)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 面向对象基础 概述 创建对象和类 类的三种定义方式 类的实例化 类的基本结构 面向对象之封装 概念 封装之对象的相关操作 封 ...

  4. 面向对象(基础oop)之继承总结

    大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开 ...

  5. JAVA入门基础6**(系列更新)———面向对象(二)的继承,抽象,接口

    **JAVA入门基础6**(系列更新)---面向对象(二)的继承,抽象,接口 面向对象2 大致总结 继承 @Override super();的应用 调用顺序 构造顺序 多态 什么是多态??? 多态有 ...

  6. python语言基础(十三)面向对象编程(封装、继承、多态)

    面向对象的三大特征:封装.继承.多态. 封装 封装是面向对象编程的一大特点,将属性和方法放到类的内部,通过对象访问属性或者方法,隐藏功能的实现细节,也可以设置访问权限. class Student() ...

  7. java面向对象基础——继承、抽象类

    一.继承 1.继承概述 为什么会有继承? 现实生活中,为什么要有继承? 程序中,为什么要有继承? 继承的含义 继承:在java中指的是"一个类"可以"继承自"& ...

  8. 面向对象三大特性之一:继承(C++)

    目录 继承的定义 基类对象和派生类对象的赋值转换 继承中的作用域 派生类与基类中成员的关系 派生类与默认成员函数的关系 继承与友元的关系 继承与静态成员的关系 面向对象的三大特性:封装,继承,多态. ...

  9. C++ 面向对象程序三大特性之 继承

    目录 继承的概念 继承的定义及使用 继承方式和访问权限 基类和派生类对象的赋值转换 继承中的各成员的作用域 派生类的默认成员函数 构造函数 拷贝构造 赋值运算符重载函数 析构函数 继承与友元 继承与静 ...

  10. 1.4 面向对象编程中级 对象的继承与super关键字-跟着韩老师学JavaSE

    大佬给推荐的韩顺平老师的课程 2021年刚刚录的船新版本! [零基础 快速学Java]韩顺平 零基础30天学会Java 硬把从另一个讲师那里看了300多集的我拽过来 几十节课一下子爱上这个节奏了!安利 ...

最新文章

  1. SQL注入漏洞全接触--入门篇
  2. 关于工作流引擎的设计讨论
  3. apache服务器的配置文件httpd.conf中有很多内容,请解释如下配置项:
  4. 注意了,Fastjson 最新高危漏洞来袭!
  5. 工业机器人电柜布线_协作并联,重新注解并联机器人
  6. eureka服务失效剔除时长配置
  7. 【CMD】 与路径相关的常量:当前目录的绝对路径、批处理文件所在目录的绝对路径、批处理文件的全路径
  8. oracle拼接字符串报错,Oracle 中wmsys.wm_concat拼接字符串,结果过长报错解决
  9. 每天一点点之 taro 框架开发 - taro路由及传参
  10. Vue2.0 脚手架代码详解
  11. android studio 继承关系 快捷键,Android Studio快捷键
  12. RAD 版本迁移工具,不怕升级麻烦了。
  13. 13. GameProjec1_GameEngine
  14. 单片机 舵机 SG90 舵机 控制原理 MSP432 单片机
  15. python操作autocad_利用python控制Autocad:pyautocad方式
  16. vue3 + vite +ts 引入静态图片
  17. ROS 应用开发入门 发布者Publisher的编程
  18. azkaban报Error Chunking during uploading files to db
  19. java索引图片,索引从图片中提取像素数据的代码的错误
  20. 如何给mac重做系统

热门文章

  1. vue+elementui上传视频并回显
  2. Python让Excel飞起来—批量制作常用图表
  3. 教程:使用EXCEL制作均值曲线图表
  4. 软考高项你想要的全在这
  5. js案例一 :方块拖动效果
  6. 洛谷 P3604 美好的每一天(莫队)
  7. js实现对数组每一项加1的三种方法
  8. Duilib的界面设计工具DuiDesigner的使用说明
  9. 美国诚实签经验——回答签证官的问题时,一定要问什么才答什么,不要犹豫改口、做很多解释或开玩笑,自信且镇静地与他对话,着装得体、举止自然、言谈自信...
  10. Python简介,第2章–字符串和列表