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. 创建一个dynamics 365 CRM online plugin (三) - PostOperation

    上两节我们创建了一个 PreOperation的plugin 今天我们创建一个PostOpeartion的plugin和之前的plugin连接起来 当创建contact之后,我们要添加一个task给新 ...

  2. 虚拟机安装及配置(centOs7)

    准备工作 a)下载VMware workstation14 b)下载CentOS7 CentOS7 c)下载xshell.xftp 安装参考 分区设置 补充(解决网络IP问题,设置IP,service ...

  3. jQuery基础(三)事件

    1.鼠标事件 jQuery鼠标事件之click与dblclick事件 click方法用于监听用户单击操作,dbclick方法用于监听用户双击操作. 方法一:$ele.click() 绑定$ele元素, ...

  4. RabbitMQ 死信队列 延时

    package com.hs.services.config; import java.util.HashMap; import java.util.Map; import org.springfra ...

  5. Hanlp分词1.7版本在Spark中分布式使用记录

    新发布1.7.0版本的hanlp自然语言处理工具包差不多已经有半年时间了,最近也是一直在整理这个新版本hanlp分词工具的相关内容.不过按照当前的整理进度,还需要一段时间再给大家详细分享整理的内容.昨 ...

  6. LiveBindings如何绑定一个对象(转)

    原文 http://www.malcolmgroves.com/blog/?p=1084 一.新建VCL工程加入TAdapterBingSource控件 二.定一个TPerson类 MyPerson ...

  7. Delphi调用大漠插件示例

    Delphi XE2 版本调用大漠插件方法:打开Component->Import Component->默认Import a Type Library,点击Next->找到Dm.d ...

  8. 用TreeSet和Comparator给list集合元素去重

    今天在做导入功能时,看到一个感觉很好的去重算法,特分享给大家看看: 其原理利用了以下几点: 1.TreeSet里面不会有重复的元素,所以当把一个List放进TreeSet里面后,会自动去重 2.Tre ...

  9. 【idea】之使用SVN一些技巧

    @Copy https://www.cnblogs.com/whc321/p/5669804.html

  10. Ubuntu 14.10 下安装Ambari 问题汇总

    在编译安装Ambari时候遇到了很多问题,现在记录一下 1 got error npm ERR! phantomjs@1.9.12 install while building ambari-web ...