继承

继承(Inheritance)可以实现类之间共享属性和方法,是面向对象编程的另一个特性

使用继承可以最大限度地实现代码复用。

  • 定义:继承就是在已有类的基础上构建新的类一个类继承已有类后,可以对被继承类中的属性和方法进行重用
  • 继承关系说明:继承关系通常也称为 is a kind of 关系。类B 继承自 类A 意味着:A所有的特点B都有,B还有一些A不具备的特点即B is a kind of A ,反之则不一定。A是一般类,B是特殊类。

举例:

Employee类:

• 属性:private修饰的属性id和name

• 方法:public修饰的构造方法和setName(String)、

getNumber()、getName()方法

PartTimeEmployee类 继承Employee的属性和方法

增加了

• 属性:private修饰的属性hourlyPay

• 方法:其他方法

• 在UML中用三角形箭头表示继承关系

继承的实现:

类的继承通过extends关键字来实现。具体语法如下:

class SubClass extends SuperClass {

子类类体

}

重点

(1)当SubClass和BaseClass位于同一个包中,则SubClass继承SuperClass中public、protected和默认访问级别的成员变量和成员方法。

(2)当Sub类和Base类位于不同的包中:SubClass继承SuperClass中public 、protected访问级别的成员变量和成员方法。

  • Java中不允许多重继承子类只能继承一个父类,即单一继承。但是,Java可以有多层继承。即一个类可以继承某一个类的子类,从而形成一颗继承树。

继承时要遵循的原则:

1.继承的层次不可太多

继承的层次应该尽量保持在两到三层,如果继承层次很多,会导致对象之间的结构关系太复杂,难以理解,增加设计和开发的难度。

2.继承树的上层为抽象层

当一个系统使用一个继承树上的类时,应该尽可能把引用变量声明为继承树的上层类型,这样可以降低类之间的耦合性。

方法重写:

注意事项

  1. 方法重写时, 方法名与形参列表必须一致
  2. 方法重写时,子类的权限修饰符必须要大于或者 等于父类的权限修饰符
  3. 方法重写时,子类返回值类型必须要小于或者 等于父类的返回值类型
  4. 方法重写时, 子类抛出的异常类型小于或者 等于父类抛出的异常类型

super关键字

  • super代表父类对象。super关键字用来在子类的成员方法中访问父类成员

(1)使用super访问父类的成员变量和成员方法。语法如下:

super.成员变量

super.成员方法([参数1,参数2,......])

(2)使用super关键字访问父类的构造方法。语法如下:

super([参数1,参数2......])

super总结

每一个子类的构造方法在没有显示调用super()系统都会提供一个默认的super()

super() 书写在第一行

可以在子类构造方法中显示调用super(),完成对特定父类构造方法的调用

当父类只有含缺省值参数的构造方法时,一定要在子类构造方法的第一行显示地调用父类构造方法

final修饰符

final 修饰变量,变量转换为常量。final也可以修饰类或者方法

  • final修饰类,意味着这个类不能被继承,声明的格式为:

final class finalClassName{

........

}

  • final修饰方法,意味着这个方法不能被重写

class FinalMethodClass{

final void finalMethod (){

…//原程序代码

}

}

  • final修饰的变量一旦被赋值,这个值不能被改变。如果对该变量进行再次赋值,则程序会在编译时报错。
class Student {        final String name;//name没有被初始化        public void introduce(){                System.out.println(“我叫”+name+”,是一名程序员”);        }}public class FinalExample{        pubic static void main (String[] args){                Student stu=new Student()        stu.introduce();         }}//编译会出错:提示变量name没有被初始化

抽象类

//抽象类的实现abstract class Animal {            //定义抽象方法shout()            public abstract void shout(){};}class Dog extends Animal{            //实现抽象方法shout()            public void shout(){                        System.out.println(“汪汪汪......”);                        }}public class AbstractExample{public static void main(String[] args){Dog dog = new Dog();dog.shout();}}

根据父类id查询所有的父级_父类子类抽象类,super final 重写方法,搞懂继承中复杂的知识点...相关推荐

  1. idea实现抽象类的所有抽象方法_父类子类抽象类,super final 重写方法,搞懂继承中复杂的知识点

    继承 继承(Inheritance)可以实现类之间共享属性和方法,是面向对象编程的另一个特性 使用继承可以最大限度地实现代码复用. 定义:继承就是在已有类的基础上构建新的类,一个类继承已有类后,可以对 ...

  2. 根据父类id查询所有的父级_031、组函数和子查询

    1.组函数(聚合函数) (1)组函数介绍 组函数操作行集,给出每组的结果.组函数不象单行函数,组函数对行的集合进行操作, 对每组给出一个结果.这些集合可能是整个表或者是表分成的组. 组函数与单行函数区 ...

  3. mysql查询每个id的前10条数据_解决 MySQL 比如我要拉取一个消息表中用户id为1的前10条最新数据...

    我们都知道,各种主流的社交应用或者阅读应用,基本都有列表类视图,并且都有滑到底部加载更多这一功能, 对应后端就是分页拉取数据. 好处不言而喻,一般来说,这些数据项都是按时间倒序排列的,用户只关心最新的 ...

  4. js 台阶有n级_乔欣这是“开眼角”了?只在眼妆中多加这一步,整个人变美了N倍...

    相信不少人这两年都见证了乔欣的进化史,从<欢乐颂>五美中的小透明,变成了红毯上的女战神,远的就不说了,就说近期她的红毯表现,完全可以用明艳动人.落落大方等各种美好的词语来形容,当真是让人刮 ...

  5. 如何使用jQuery刷新当前页面、刷新父级页面?

    如何使用jQuery刷新当前页面.刷新父级页面? 1.全页面刷新方法 window.location.reload(); //刷新当前页面.parent.location.reload(); //刷新 ...

  6. CSS 中,为什么绝对定位(absolute)的父级元素必须是相对定位(relative)?

    问题: CSS 中,为什么绝对定位(absolute)的父级元素必须是相对定位(relative)? 搞清楚了,正确的应该是只要父级元素=设置了position值(absolute或者relative ...

  7. java递归查询父节点_父节点递归查询和子节点递归查询函数

    本文为博主原创,未经允许不得转载: 由于在项目中用到了向上查询父节点的递归查询和向下查询子节点查询的递归查询,由于在实现过程中,写递归查询的sql函数 花费了较长的时间,所以在此总结一下,两种递归查询 ...

  8. python在多继承中子类调用某个父类的同名方法之 super讲解(mro机制)***

    目录 2.   钻石继承遇到的难题 3.   针对钻石问题各语言的解决方法 3.1. C++ 3.2. Java 3.3. Ruby 3.4. Python 4.   super的内核:mro 5.  ...

  9. mysql 递归查找父节点_MYSQL递归查询,根据子类ID查询所有父类(最全)

    数据表结构 id    name  parent_id 1        A        0 2        B        1 3        C        1 4        D   ...

最新文章

  1. 实战篇:一个核心系统 3 万多行代码的重构之旅
  2. 使用OpenCV 实现matlab的padarray(A, padsize, ‘symmetric’)函数简单实现
  3. react组件设计原则_React组件设计规则
  4. 2011年最后一小时
  5. hdu1247 Hat’s Words
  6. 快速学懂pandas
  7. java船_Java-货船
  8. delphi7连接oracle,delphi7.0连接oracle数据库的.doc
  9. 小米路由器3潘多拉固件刷机教程
  10. python提取停用词_python文本处理 数据挖掘 停用词检索
  11. 认知科学、神经科学、和认知神经科学
  12. 关于华为AR/HUAWEI AR Engine
  13. vs2013 qt5.6.3安装
  14. 数据库建模-物理层建模
  15. 深拷贝和浅拷贝的几种方法
  16. 时间在流逝——上还是不上大学?
  17. Qt5学习 模仿qq音乐播放器样式(2)——点击动画效果+歌词颜色变换展示
  18. Spring学习:Spring的IOC注解
  19. 网络编程和mysql
  20. Mysql5.7安装3306端口报错问题解决方法

热门文章

  1. java 省市区三级联动_AJAX省市区三级联动下拉菜单(java版)
  2. 1、如何进行字符串常量中的字符定位_Java String:字符串常量池,我相信会有很多朋友不很理解这部分...
  3. 2021高考成绩查询内蒙时间,2021内蒙古高考成绩什么时候几点可以查
  4. 【STC15库函数上手笔记】5、定时器
  5. 【51单片机快速入门指南】4.3.2: MPU6050:一阶互补滤波、二阶互补滤波和卡尔曼滤波获取欧拉角
  6. 第一章:OpenCV入门
  7. Linux C学习---递归函数
  8. printf格式化输出类型
  9. [react-router] React-Router 3和React-Router 4有什么变化?添加了什么好的特性?
  10. [react] 怎么在JSX里属性可以被覆盖吗?覆盖的原则是什么?