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. 菜鸟Vue学习笔记(一)

    我今年刚参加工作,作为一个后台Java开发人员,公司让我开发前端,并且使用Vue框架,我边学习边记录. Vue框架是JS的封装框架,使用了MVVM模式,即model—view—viewmodel模式, ...

  2. Session、Cookie、Cache、Token分别是什么及区别

    一.Session 1 )Session 解释 Session 是单用户的会话状态.当用户访问网站时,产生一个 sessionid.并存在于 cookies中.每次向服务器请求时,发送这个 cooki ...

  3. 2、php中字符串单引号好和双引号的区别

    使用单引号和双引号的主要区别是:单引号定义的字符串中出现的变量和转义序列不会被变量的值代替,而双引号中使用变量名会显示该变量的值.

  4. html5 + thyleaf引擎

    偶然与巧合 舞动了蝶翼 谁的心头风起 前赴而后继 万千人追寻 荒漠唯一菩提 似擦肩相遇 或擦肩而去 命运犹如险棋 无数时间线 无数可能性 终于交织向你

  5. 简谈OSI七层模型(网络层)

    七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系. 它是一个七层的.抽象的模型 ...

  6. java 性能测试框架工具-junitperf

    性能测试工具 对于 Java 开发者来说,要去学习性能测试工具未免很麻烦. 但有时候会有性能测试的需求. junitperf junitperf 就是一款为 Java 开发者设计的性能测试框架,如果你 ...

  7. Tomcat 配置详解和优化

    2018年01月09日 18:14:41 tianxiaojun2014 阅读数:306   转自:https://www.cnblogs.com/xbq8080/p/6417671.html htt ...

  8. OpenStack Trove组件WSGI和RPC调用流程(参考调用的整个过程)

    参考博文:https://blog.csdn.net/bill_xiang_/article/details/72909927

  9. .NET MVC 控制器和行为

    行为就是可访问方法(public) 行为返回类型必须是 ActionResult 或者其派生类,基本上返回类型为以下四种之一 View(视图路径) Json(对象或者对象集合) Content(字符串 ...

  10. Django之前后端交互使用ajax的方式

    1. 在项目中前后端数据相互是一种常态, 前后端交互使用的是ajax请求和form表单的请求两种方式" ajax与form表单的区别在于: form 是整个页面刷新提交的,  但是ajax ...