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. Javascript var 和 let 的区别

    Javascript var 和 let 的区别 var 是函数块的全局变量. let 是代码块的局部变量. let 变量不会提升,如果先使用后定义会 undefind. 参考: https://de ...

  2. sedsed 一个更好理解sed执行过程的工具

    官网:http://aurelio.net/projects/sedsed/    这个上面好多学习的资料 嘿嘿 留着慢慢看 昨晚在看sed的具体执行过程,看到有hold space,pattern ...

  3. Hanlp汉字转拼音使用python调用详解

    1.hanlp简介 HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用.HanLP具备功能完善.性能高效.架构清晰.语料时新.可自定义的 ...

  4. [转]马上2018年了,该不该下定决心转型AI呢

    转自:http://blog.csdn.net/eNohtZvQiJxo00aTz3y8/article/details/78941013 2017年,AI再一次迈向风口,但我们如何判断未来走向?应不 ...

  5. MDX函数

    MDX重点函数 成员函数 1..CurrentMember 获取运行时当前的成员,用法:<Dimension>.CurrentMember . 2..Parent 获取运行时当前的成员的父 ...

  6. multiprocessing还是threading?

    今夜看了一篇分析python中多进程与多线程优劣的文章,文章通过几组性能测试强调了多进程的性能优势,同时也深入分析了为何python中多线程性能较差的原因,GIL就是解释器全局锁,该机制限制每个pyt ...

  7. MySQL 批量添加

    自己封装的一个批量添加. $data 是一个二维数组.key对应是数据表的字段名: /** * 批量创建 * @param array $data * @return int $res 影响行 * @ ...

  8. phpcms调用语句

    title 标题:url 链接地址:thumb缩略图 :先调用moreinfo="1"  content 内容: {php list($copyfrom) = explode('| ...

  9. cocos2dx自带物理引擎-创建物理世界

    首先在createScene()里 auto scene = Scene::createWithPhysics(); 创建带有物理的场景 然后再OnEnter里创建边界框 auto body = Ph ...

  10. 一台电脑上配置多个tomcat同时运行

    好使 1 1.配置运行tomcat 首先要配置java的jdk环境,这个就不在写了  不懂去网上查查,这里主要介绍再jdk环境没配置好的情况下 如何配置运行多个tomcat 2.第一个tomcat: ...