5.1-全栈Java笔记:面向对象的特征(一)继承 | 上

JAVA面向对象进阶

本章重点针对面向对象的三大特征:继承、封装、多态,进行详细的讲解。很多概念对于初学者来说,更多的是先进行语法性质的了解,不要期望,通过本章学习就“搞透面向对象”。本章只是面向对象的起点,后面所有的章节说白了都是面向对象这一章的应用。


老鸟建议

建议大家,学习本章,莫停留!学完以后,迅速开展后面的章节。可以说这么说,以后所有的编程都是“面向对象”的应用而已!

继承(extend)

继承的实现

继承让我们更加容易实现类的扩展。 比如,我们定义了人类;再定义Boy类就只需要扩展人类即可。实现了代码的重用,让我们不再重新发明轮子(don’t  reinvent  wheels)。

从英文字面意思理解,extends的意思是“扩展”。子类是父类的扩展。现实世界中的继承无处不在。比如:

图1 现实世界中的继承

上图中,哺乳动物继承了动物。意味着,动物的特性,哺乳动物都有;在我们编程中,如果新定义一个Student类,发现已经有Person类包含了我们需要的属性和方法,那么Student类只需要继承Person类即可拥有Person类的属性和方法。

【示例1】使用extends实现继承


package   com.bjsxt.gao;

public class   Test{

public static void   main(String[] args) {

Student s = new   Student("高淇",172,"java");

s.rest();

s.study();

}

}

class   Person {

String name;

int height;

public void   rest(){

System.out.println("休息一会!");

}

}

class   Student extends Person {

String major; //专业

public void   study(){

System.out.println("在尚学堂,学习JAVA");

}

public   Student(String name,int   height,String major) {

//天然拥有父类的属性

this.name =   name;

this.height =   height;

this.major =   major;

}

}

示例1 运行效果图

instanceof 运算符

instanceof是二元运算符,左边是对象,右边是类;当对象是右面类或子类所创建对象时,返回true;否则,false。比如:


public class   Test{

public static void   main(String[] args) {

Student s = new   Student("高淇",172,"java");

System.out.println(s   instanceof Person);

System.out.println(s   instanceof Student);

}

}

执行结果都是返回:true

继承使用要点

1.子类继承父类,可以得到父类的全部属性和方法(除了父类的构造方法),但不见得可以使用(比如,父类私有的属性和方法)。

2.Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。

3.Java中类没有多继承,接口有多继承。

4.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object

5.父类也称作超类、基类、派生类等。

方法的重写override

子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。

方法的重写需要符合下面的三个要点:

1.“==”:  方法名、形参列表相同。

2.“≤≤”:返回值类型和异常类型,子类小于等于父类。

3.“≥”:  访问权限,子类大于等于父类

【示例2】方法重写


package   com.bjsxt.javase;

public class   TestOverride {

public static void   main(String[] args) {

Vehicle v1 = new   Vehicle();

Vehicle v2 = new   Horse();

Vehicle v3 = new   Plane();

v1.run();

v2.run();

v3.run();

v2.stop();

v3.stop();

}

}

class   Vehicle { //交通工具类

public void   run(){

System.out.println("跑....");

}

public void   stop(){

System.out.println("停止不动");

}

}

class   Horse extends Vehicle {  //马也是交通工具

public void   run() { //重写父类方法

System.out.println("四蹄翻飞,嘚嘚嘚...");

}

}

class   Plane extends Vehicle {

public void   run() {  //重写父类方法

System.out.println("天上飞!");

}

public void   stop() {

System.out.println("空中不能停,坠毁了!");

}

}

示例2 运行效果图

本节我们先聊到这儿,下节我们继续聊……



「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

 笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

C-手刃移动前端和Web前端

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop

时间: 2024-10-21 03:08:02

5.1-全栈Java笔记:面向对象的特征(一)继承 | 上的相关文章

5.2-全栈Java笔记:面向对象的特征(一)继承 | 下

上节我们聊到「Java面向对象的特征:继承」这节我们继续聊一下继承的应用. Object类 Object类基本特性 Object类是所有Java类的根基类,也就意味着所有的JAVA对象都拥有Object类的属性和方法.如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类. [示例1]Object类 public class Person { ... } //等价于: public class Person extends   Object { ... } toStrin

4.3-全栈Java笔记:面向对象的内存分析

面向对象的内存分析 为了让大家对于面向对象编程有更深入的了解,我们要对程序的执行过程中,内存到底发生了什么变化,进行剖析,让大家做到"心中有数",通过更加形象的方式理解程序的执行方式. 老鸟建议:       本节是为了让初学者更深入了解程序底层执行情况,为了完整的体现内存分析流程,会有些新的名词,比如:线程.Class对象.大家暂时可以不求甚解的了解,后期学了这两个概念再回头来看我们这篇内存分析,肯定收获会更大. Java虚拟机的内存可以分为三个区域:栈stack.堆heap.方法区

5.3-全栈Java笔记:面向对象特征(二)封装、多态

封装(encapsulation) 封装的作用和含义 我要看电视,只需要按一下开关和换台就可以了.有必要了解电视机内部的结构吗?有必要碰碰显像管吗?制造厂家为了方便我们使用电视,把复杂的内部细节全部封装起来,只给我们暴露简单的接口,比如:电源开关.具体怎么内部实现的,我们不需要操心. 需要让用户知道的暴露出来,不需要让用户了解的全部隐藏起来.这就是封装. 我们程序设计要追求"高内聚,低耦合". 高内聚就是类的内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量的方法给外部使用,

5.4-全栈Java笔记:面向对象进阶之对象的转型 | FINAL关键字 |抽象方法和抽象类

对象的转型(casting) 引用变量只能调用它编译类型的方法,不能调用它运行类型的方法.这时,我们就需要进行类型的强制转换! [示例1]对象的转型 public class   TestCasting { public static void   main(String[] args) { Object obj = new   String("北京");  //向上可以自动转型 //obj.charAt(0)      //无法调用.编译器认为obj是Object类型而不是Strin

10.2-全栈Java笔记:最全面的IO技术(二)

上节我们聊到「IO技术概念及入门」这节我们继续聊一下IO技术的分类. Java中流的概念细分 按流的方向分类: 输入流:数据流向是数据源到程序(InputStream.Reader结尾的流) 输出流:数据流向是程序到目的地(OutPutStream.Writer结尾的流) 按处理的数据单元: 字节流:按照字节读取数据(InputStream.OutputStream)命名上以stream结尾的流一般是字节流. 字符流:按照字符读取数据(Reader.Writer).命名上以Reader/Writ

10.1-全栈Java笔记:最全面的IO技术(一)

IO技术 对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能.程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备等等. 外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象.屏蔽外部的差异,从而实现更加便捷的编程. 输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是"读",读取外部数据).常见的应用: 1) 读取硬盘上的文件内容到程序.例如:播放器打开一个视频文件.word打

4.1-全栈Java笔记:对象的进化史

面向对象和面向过程的区别 面向过程编程思想思考问题时,我们首先思考"怎么按步骤实现?"并将步骤对应成方法,一步一步,最终完成. 这个适合简单任务,不需要过多协作的情况下.比如,如何开车?我们很容易就列出实现步骤: 1. 发动车 2. 挂挡 3.踩油门 4. 走,你 面向过程适合简单.不需要协作的事务. 如果,我们需要思考"如何造车?",你就会发现列出1234这样的步骤,是不可能的.那是因为,造车太复杂,需要很多协作才能完成. 面向对象(Object)编程,更契合人的

13.4-全栈Java笔记:打飞机游戏实战项目|offScreenImage|GameObject|Plane

双缓冲技术解决闪烁问题 上节,我们实现了动画效果,但是发现窗口会不停的闪烁,体验度非常差.在实际开发中,绘制图形是非常复杂的,绘图可能需要几秒甚至更长时间,也经常发生闪烁现象, 为了解决这个问题,我们通常使用"双缓冲技术". 1)"双缓冲技术"的绘图过程如下: a. 在内存中创建与画布一致的缓冲区 b. 在缓冲区画图 c. 将缓冲区位图拷贝到当前画布上 e. 释放内存缓冲区 双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上,再一次性

4.2-全栈Java笔记:对象和类的概念及定义

对象和类的概念 我们人认识世界,其实就是面向对象的.大家眼里都是一个个对象,要不怎么老说搞对象搞对象啊.比如现在让大家认识一下"天使"这个新事物,天使大家没见过吧,怎么样认识呢?最好的办法就是,给你们面前摆4个天使,带翅膀的美女,让大家看,看完以后,即使我不说,大家下一次是不是就都认识天使了. 但是,看完10个天使后,我们总要总结一下,什么样的东东才算天使?天使是无数的,总有没见过的!所以必须总结抽象,便于认识未知事物!总结的过程就是抽象的过程. 小时候,我们学自然数时怎么定义的?像1