Java12-java语法基础(十一)继承

一、继承

学习要求:

1、 理解继承的概念与作用

2、 掌握继承的实现机制

3、理解继承中的覆写与覆盖

4、掌握super关键字的使用

回顾:

1、对客观世界进行分析,抽象成类,并利用java语言实现。

2、利用private进行封装。

3、利用this关键字引用类中的数据成员和方法。

1、继承的概念和作用

同类事物既有共性又有其各自的特殊性。

1)继承机制

在由一般类特殊类形成的一般-特殊之间 的结构中,把一般类和所有特殊类的对象实例都共同具有的属性和操作一次性地在一般类中进行的定义,在特殊类中不再重复定义一般类中已经定义的属性和操作,特殊类自动地拥有一般类(以及所有更上层的一般类)中定义的属性和操作。特殊类的对象拥有其一般类的对象的全部属性与操作(除非进行限制),称作特殊类对一般类的继承

2)继承特征

(1)传递:类C继承了类B,类B继承了类A,则类C既有从类B继承下来的属性与方法,也有从类A那里继承下来的属性和方法。

(2)类之间的层次关系:简化了人们对客观事物的认识和描述,能清晰体现相关类之间的层次结构关系。

(3)软件复用功能:类B继承类A,那么建立类B时只需要描述与父类(类A)不同的特征(数据成员和成员方法)即可。这种方法能减少代码量和数据的冗余度,大大增加程序的重用性。

(4)已维护性:减少了模块之间的接口和界面,大大增强了软件的易维护性。

(5)多重继承机制:接口机制来实现多重继承,即一个子类有多个父类。

附:

耦合:模块和模块之间的紧密程度

类聚:模块内部的功能

开发中:高内聚、低耦合好。

2、实现继承机制

java中,通过extend来实现继承

格式:

class 子类名称 extend 父类名称{

子类数据成员

子类成员方法

}

注意:

(1)父类:基类、超类---->一般类

强调:在java中,所有类的基类都是Object类:java.lang.Object

(2)子类:派生类---->特殊性

(3)在继承中,子类自动拥有父类的可访问成员。

课堂练习:交通工具类

注意:子类虽然拥有父类属性,但不能直接访问父类的私有成员,非私有成员可以访问

3、方法的覆写和属性覆盖

(1)方法覆写:子类拥有与父类非私有成员方法同名的成员方法

必须保证被子类覆写的方法不能拥有比父类更为严格的访问权限。

(2)属性覆盖:子类拥有与父类非私有数据成员同名的数据成员

在数据成员覆盖关系中,成员方法使用数据成员按照就近原则使用数据成员。

4、super关键字

(1)可以访问直接父类中被子类覆盖的同名数据成员:super.数据成员名

直接父类 ---> extends后的类

在java中,只能单继承,一个类的直接父类只能有一个。

(2)可以访问直接父类中被子类覆写的同名成员方法:super.成员方法名(参数);

(3)调用直接父类的构造方法,必须放第一行:super();

强调:父类必须显示的写出空构造方法

继承机制中调用构造方法的顺序:先父类再子类

5、向上转型

父类:Animal

子类:Cat,Dog

向上转型:

Animal dog = new Dog();

Animal cat = new Cat();

说明:Animal类型的dog可以调用Dog子类的方法,Animal类型的dog可以调用Dog子类的方法。

向上转型可以隐藏一些实现细节

二、final和instanceof

(一)final关键字

1、修饰类:修饰的类不能被继承,即不能派生子类

final class{}

2、修饰成员方法:修饰的方法不能被子类的方法覆盖

final public void printInfo(){}

3、修饰数据成员:修饰的数据成员或者局部变量表示常量,不能更改它的值;这时一般数据成员全部大写,单词用下划线分隔。

final private String name;

注:被final修饰的常见的类:String、System……

强调:子类不能覆盖父类方法时,子类中的成员方法名与父类的成员方法名相同会报错,即此时子类中不可以出现与父类同名的方法。

4、final修饰引用变量:该变量只能始终引用一个对象,但可以改变对象的内容

(二)instanceof关键字/运算符

Java的常用类库有几百个,在软件开发过程中创建很多不同类型的对象,经常需要判断某个对象属于哪个类,利用instanceof关键字可以判断一个对象是哪个类的实例。

1、语法格式:

对象 instanceof 类;

结果为true说明对象是类的实例;false说明对象不是类的实例

示例:

class A{}

class B extends A{}

测试:

A a = new A();

B b = new B();

b insctaceof B;//true

b insctaceof A;//true

a insctaceof B;//false

结果:对象被子类创建后,它既是子类的实例,也是父类的实例。

(三)小结

1、final关键字的主要作用?

(1)修饰类,不能被继承

(2)修饰方法,不允许覆写

(3)修饰成员变量,不允许更改,为常量

(4)修饰引用类型变量,始终引用一个对象,但可以改变对象的内容

2、final关键字修饰数据有哪些要求?

(1)修饰局部变量只能赋值一次

(2)修饰非静态数据成员必须在构造方法中初始化,或者直接初始化

(3)修饰的静态数据成员必须初始化

3、为什么使用instanceof关键字?

判断对象是否是类的实例

Java12-java语法基础(十一)继承的更多相关文章

  1. Java语法基础(1)

    Java语法基础(1) 1.      Java是一门跨平台(也就是跨操作系统)语言,其跨平台的本质是借助java虚拟机 (也就是JVM(java virtual mechinal))进行跨平台使用. ...

  2. JAVA常用基础知识点[继承,抽象,接口,静态,枚举,反射,泛型,多线程...]

    类的继承 Java只支持单继承,不允许多重继承- 一个子类只能有一个父类- 一个父类可以派生出多个子类这里写图片描述子类继承了父类,就继承了父类的方法和属性.在子类中,可以使用父类中定义的方法和属性, ...

  3. Java语法基础DayFive

    一.继承 1.格式:class 子类 extends 父类 2.好处:提高代码的复用性:让类与类之间产生了关系,是多态的前提. 3.弊端: (1)类的耦合性增强了,而开发的原则是高内聚,低耦合.内聚是 ...

  4. java语法基础(四)

    继承 继承概述 继承是面向对象语言的三大基本特性(封装,继承,多态)之一. 一个类可以继承另外一个类,继承的类称为子类(也可以叫派生类),被继承的类称为父类(或者也叫基类,超类). 通过继承,子类可以 ...

  5. Java语法基础常见疑惑解答

    1. 类是java的最小单位,java的程序必须在类中才能运行 2. java函数加不加static有何不同 java中声明为static的方法称为静态方法或类方法.静态方法可以直接调用静态方法,访问 ...

  6. Java语法基础学习DaySeven

    ---恢复内容开始--- 一.包装类——Wrapper 1.定义:针对八种基本数据类型定义相应的引用类型——包装类(封装类) boolean——Boolean          byte——Byte ...

  7. Java语法基础学习DaySix

    一.JavaBean——可重用组件 1.JavaBean是指符合以下标准的Java类: (1)类是公共的 (2)有一个无参的公共的构造器 (3)有属性,且有对应的get.set方法 2.好处 用户可以 ...

  8. java语法基础(三)

    类和对象 面向对象语言概述 java是一种面向对象的语言,什么是面向对象的语言? 要搞清楚什么是面向对象语言,我们需要相对的了解一下面向过程的语言. java入门阶段,我们又给大家说过一些语言的分类, ...

  9. java语法基础(一)

    这个是自己前两年做java视频教程时候的课件.感兴趣的同学可以参考下. 这里是纯粹的语法行总结. editplus的使用 选择项目目录 打开editplus 左侧目录导航栏 可以打开盘符,文件夹 可以 ...

  10. JAVA语法基础作业——动手动脑以及课后实验性问题 (八)

    一.动手动脑 运行AboutException.java示例,了解Java中实现异常处理的基础知识. 1)源代码 import javax.swing.*; class AboutException ...

随机推荐

  1. py-day3-5 python 函数式编程

    # 函数式(方程式 y = 2*x+1) def calc(x): return 2*x+1 print('得出的结果:',calc(6)) 得出的结果: 13 # 面向过程 def calc(x): ...

  2. windows与linux换行规则

    在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符.要是在这 ...

  3. HTML5操作麦克风获取音频数据(WAV)的一些基础技能

    基于HTML5的新特性,操作其实思路很简单. 首先通过navigator获取设备,然后通过设备监听语音数据,进行原始数据采集. 相关的案例比较多,最典型的就是链接:https://developer. ...

  4. Maven项目构建过程练习

    转载于:http://www.cnblogs.com/xdp-gacl/p/4051690.html 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建 ...

  5. 我是一个录像机(NVR)

    我是一个网络录像机,简称NVR.我的前辈是DVR,我们的区别很简单,DVR接的是模拟摄像机,我连接的是IP摄像机. 我的前辈DVR比我辛苦,因为模拟摄像机的模拟信号连过来之后,他要进行数字化.编码压缩 ...

  6. 【动态规划】最大连续子序列和,最大子矩阵和,最大m子段和

    1.最大字段和问题 求一个序列最大连续子序列之和. 例如序列[-1,-2,-3,4,5,-6]的最大子段和为4 + 5 = 9. ①枚举法 int MaxSum(int n,int *a){ int ...

  7. pj2--图书管理系统

    这一次做得是图书管理系统. 下面是功能框图 下面是流程图 实际在做这个项目的时候根据相应的实际情况对功能流程等等做了一些小小的改变. 下面是一些值得记一笔的地方. 1.借用系统自带的导航控件(Bind ...

  8. Inception-v3的设计思路小结

    一.网络更深.更宽带来的问题 参数太多,若训练数据集有限,容易过拟合: 网络越大计算复杂度越大,难以应用:(内存和计算资源) 网络越深,梯度越往后穿越容易消失,难以优化模型. 解决: 如何减少参数(且 ...

  9. 谷歌浏览器内核Cef js代码整理(三) 字符串处理

    *字符串截取方法*/ var s="abc_def[ghi]jk[i]"; var temp;function CopyFromStr(str_source,str_key, bl ...

  10. Android控件使用FragmentTabHost,切换Fragment;

    大部分APP的主界面都很类似,要么底部导航的,要么就是侧滑菜单,还有底部导航+侧滑菜单的:底部导航实现大概有几种方式: TabHost+Fragment RadioGroup+Fragment Fra ...