面向对象-继承

继承:

概念:

  • 继承父类的属性行为,使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。
  • 继承是多态的前提,如果没有继承,就没有多态。

特点:

  • java只能单继承,但可以多层继承(a继承b,b继承c,那么a就有b和c的属性)
  • 老师和学生是人的一种,那么人就是父类,老师学生就是子类(谁是谁的一种)
  • 为什么不支持多继承?
    如果是a同时继承b和c,而且b和c都有一个method方法,那a会懵逼,它不知道用哪个,为了不让它懵逼,所以不能多继承,但是可以多层继承,因为有就近原则

格式:

class 子类 extends 父类 {...}
// Java是单继承的。一个类智能继承一个类(一个人只有一个亲生父母)

好处:

1.提高代码的复用性(相同的代码不需要重复的写,只需要提取到父类中,子类可以直接使用)
2.提高代码的维护性

弊端:

  • 耦合性(代码与代码之间存在关联就是耦合)
  • 降低代码的灵活性(继承了以后子类必须拥有父类的非私有属性和方法,子类会被约束)

就近原则:

在子类方法中访问一个变量,采用的是就近原则,先看自己有没有,没有就找爸爸要

  • 整个流程是这样:
    子类局部范围找
    子类成员范围找
    父类成员范围找
    如果都没有就报错(不考虑父亲的父亲…)

使用场景:

类与类之间存在相同(共性)的内容,就可以使用继承优化代码。
比如iPhone是一个手机品牌,huawei是一个手机品牌,Samsung也是一个手机品牌,但都有一个共性就是手机,所以就都可以继承手机类

案例:

学生类:

  • 属性:姓名、年龄、学习、吃饭、睡觉;

老师类:

  • 属性:姓名、年龄、教书、吃饭、睡觉;

班主任类

  • 属性:姓名、年龄、管理、吃饭、睡觉;

思路:

共同拥有的属性抽取到父类,子类只需要继承父类就可以得到这些属性、方法,子类只需要写子类特有的方法即可。

  //    定义父类
public class Human {private String name;private int age;public void eat(){System.out.println("我是父类的吃方法");}public void sleep(){System.out.println("我是父类的睡觉方法");}// 省略get、set、构造方法}//   定义学生类
public class Student extends Human {public void study(){System.out.println("我是学生类的上课方法");}//   定义老师类
public class Teacher extends  Human {
public void teach(){System.out.println("我是老师类的上课方法");}}
}//   定义班主任类
public class ClassTeach extends Human{public void manage(){System.out.println("我是班主任类的管理方法");}
}//   定义测试类public static void main(String[] args) {Teacher teacher = new Teacher();teacher.eat();teacher.sleep();teacher.teach();teacher.setAge(21);teacher.setName("小明");System.out.println(teacher);}
}

得到结果:
在这里插入图片描述
注意:

子类不能继承父类的构造器,因为子类有自己的构造器。
但是子类可以继承父类的私有成员(成员变量,方法),只是子类无法直接访问而已,可以通过getter/setter方法访问父类的private成员变量。

super:

概念:

this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象引用)

this和super的使用区别:

成员变量:

  • this.成员变量 – 访问本类成员变量
  • super.成员变量 – 访问父类成员变量

成员方法:

  • this.成员方法 – 访问本类成员方法
  • super.成员方法 – 访问父类成员方法

构造方法:

  • this(…) – 访问本类构造方法
  • super(…) – 访问父类构造方法

继承中构造方法的访问特点:

通过子类对象访问一个方法

  1. 子类成员范围找
  2. 父类成员范围找
  3. 如果都没有就报错(不考虑父亲的父亲…)

问题:

  • 子类继承父类出现重名的成员变量时会有变化吗?
    子类继承父类后,出现重名的成员变量,子类会优先访问自己的,自己没有才去访问父类的
  • 子类中所有的构造方法默认都会访问父类中无参的构造方法
  • 为什么要把super()放在第一行
  • 子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化, 原因在于,子类构造器的第一行都隐含了一个super()去调用父类的无参构造器,super()可以省略不写。
  • 如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?
  1. 通过使用super关键字去显示的调用父类的带参构造方法
  2. 子类通过this去调用本类的其他构造方法,本类其他构造方法再通过super去手动调用父类的带参的构造方法
    注意: this(…)super(…) 必须放在构造方法的第一行有效语句,并且二者不能共存,默认的super();也是在第一行的,只是隐式的而已。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何发布Jar包到Maven中央仓库

https://www.iteblog.com/archives/1807.html转载于:https://www.cnblogs.com/longshiyVip/p/6858844.html

java previous_java – 在枚举类型上实现`next`和`previous`的最好方法是什么?

假设我有一个枚举:enum E {A, B, C;}如lucasmo by lucasmo所示,枚举值按照它们被初始化的顺序存储在静态数组中,您可以稍后用E.values()检索(克隆)此数组。现在假设我想实现E#getNext和E#getPrevious,以使所有下列表达式求值为tru…

什么是抽象类

抽象概念: 当我们在做子类共性功能抽取时,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了! 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为…

java 加密 sha_Java加密 消息摘要算法SHA实现详解

SHA是消息摘要算法的一种实现方式,前面已经总结过MD2\4\5的实现,接下来就为大家总结一下SHA的实现。SHA的jdk实现:private static void SHA_JDK(){try {MessageDigest digest MessageDigest.getInstance("SHA");//我们可以通过SHA…

monkeyrunner脚本的录制和回放

参考:http://www.cnblogs.com/android-host/p/5378996.html 需要条件: 1.android-sdk 2.monkey_recorder.py 3.monkey_playback.py 操作步骤: 1)新建monkey_recorder.py文件,复制以下代码: #!/usr/bin/env monkeyrunne…

什么是接口

概念: 接口是更加彻底的抽象,接口中全部是抽象方法。接口是不能直接创建对象的。从JDK8之后,接口中不再只是抽象方法,接口还可以有默认方法(也就是实例方法),和静态方法了,还包含了私…

php session作用,PHP中Session的作用

PHP session变量的作用是:存储用户的session信息,或者改变用户的session设置。Session变量储存了一个单一用户的信息,它可以被所有的页面使用。PHP Session变量当你在自己的计算机上运行一个应用程序时,你打开它,对他做…

Vuex核心知识(2.0)

Vuex核心知识(2.0) 转自:http://www.cnblogs.com/ghost-xyx/p/6380689.html Vuex 是一个专门为 Vue.js 应该程序开发的状态管理模式,它类似于 Redux 应用于 React 项目中,他们都是一种 Flux 架构。相比 Redux&#xff…

java带权连通图上最小权边,连通图最小生成树的算法及实现

连通图的最小生成树生成树定义:无向连通图G的极小连通子图,称为它的生成树。(n个顶点,n-1条边)考虑一下下面这个图上图是一个完全图,它的生成树不是唯一的,我们列出最特殊的两种情况上面2个图都是第一个完全图的生成树…

Android7.0,剪裁后提示“无法保存经过裁剪的图片”

今天在适配一下 7.0的拍照和选择照片,裁剪,发现拍照可以,选择图片也可以, 但是就是裁剪的时候不行,会弹出提示:无法保存经过裁剪的图片 后来才发现,在设置裁剪要保存的 intent.putExtra(MediaSt…

PHP垃圾回收机制理解

使用的是“引用计数”方式进行回收。简单地理解的话,就是每个分配的内存区域都有一个计数器,记录有多少个变量指针指向这片内存。当指向该片内存的指针数量为0,那么该片内存区域就可以被回收。 引用计数计数简单,强大,…

枚举的用法

概念: 为了间接的表示一些固定的值,Java就给提供了枚举,是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内、 特点: 所有枚举类都是Enum的子类我们可以通过”枚举类名.枚举项名称”去访问指定的枚举项每一个枚举项其实…

在php中创建三个表格,创建新工作表PHPExcel

我正在尝试创建另一个工作表,一切正常.但我现在需要的是根据变量创建1.例如 :我有两个选项用于验证,一个用于结果.一切都由一个名为$resultado的布尔变量来约束.我在CakePHP中有我的组件function ExcelCargaMasivaComponent() {$this->xls new PHPExcel();$this…

java.lang.String类

复制下来的java.lang.String源码。在此基础上添加自己的注释,偷懒了,用来加深印象吧。英语不好,没有翻译,不理解的方法直接百度的。然后按照自己的理解描述。/** (#)String.java 1.205 09/02/26** Copyright 2006 Sun Microsys…

面向对象-多态

概念 多态是指同一行为,具有多个不同表现形式 多态是除封装、继承之后面向对象的第三大特征。 多态是出现在继承或者实现关系中的 使用多态有什么前提 要有继承或实现关系要有方法的重写要有父类引用指向子类对象 子类对象是可以赋值给父类类型的变量。例如Animal是…

php 区位码字符,php汉字如何转区位码

php汉字转区位码的方法:首先创建一个PHP示例文件;然后通过“sprintf("%02d%02d",ord($t1[0])-160,ord($t1[1])-160);”方法实现汉字转区位码即可。推荐:《PHP视频教程》PHP中实现汉字转区位码应用源码实例解析PHP里如何实现汉字转区…

ssh(struts,spring,hibernate)开发的初步集成01--依赖

一.概念 SSH 通常指的是 Struts2 做前端控制器,spring 管理各层的组件,hibernate 负责持久化层。 SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,MyBatis 负责持久化层。 二.构建流程 创建maven工程...在pom.xml文件…

频谱扩展 matlab,简单的直接扩展频谱通信系统仿真分析

随着通信技术的迅猛发展,扩展频谱通信技术的优点已经越来越明显并被接受,并在各个领域得到了广泛的应用。同时随着计算机技术和仿真技术的日益发展和应用,如何应用一些方便、友好的软件对通信系统进行直观的模型仿真,并进行仿真结…

内部类怎么用

内部类: 在一个类中定义一个类。 举例:在一个类A的内部定义一个类B,类B就被称为内部类 // 格式: class 外部类名{ 修饰符 class 内部类名{ } } class A{public class B {}}内部类的访问特点: 内部类可以直接访问外部类…

一个css3特效

转载于:https://www.cnblogs.com/xiongwei2017/p/6877393.html