1.通过继承来开发超类(superclass)

2.使用super 关键词唤起超类的构造方法

3.在超类中覆盖方法

4.区分override和overload

5.在Object类中探索toString()类

6.发现多态性和动态绑定

7.描述解释为什么向下转型是必须的

8.在Object类中探索equals 方法

9.存储,取回,实现ArrayLis的对象

10.使用ArrayList类实现Stack

11.超类中使用数据和方法,protected

12.使用final模块来禁止类和方法的覆盖

5.在Object类中探索toString()类

  Java中的每个类都是从java.lang.Object类中扩展出来,定义类的时候如果没有特别规定是继承来的,那么默认父类是Object。例如

  public class ClassName 和 public classClassName extends Object

  这两个语句是一样的,String类,StringBuilder类都来是来自与Object类,学习toString()方法

  

public String toString()

toString的返回值是描述对象的字符串。默认情况下,返回的字符串由一系列对象的类名,通常我们在使用的时候需要将toString改写。

  笔记:也可以使用对象来唤起 System.out.println(Object)或者 System.out.println(Object)

6.发现多态性和动态绑定

  面向对象的三个特性:封装、继承和多态。

  介绍两个有用的术语:派生类subtype和超类supertype。子类定义的类型是subtype,例如原本研究圆是几何体。Circle is a geometry。所以说GeomericObject类是父类,Circle是子类,所以Circle是GeomericObject的subtype。GeomericObject是Circle的supertype。

  继承关系使得子类从父类中继承一些父类的特征并且加入新的特性,子类是某种特殊的父类,子类的所有实例也可以算是父类的实例,反之不成。也就是我们理解的圆是几何图形但是几何图形不是圆。

动态绑定

  超类中定义方法,然后在子类中进行覆盖,就像前面的toString()方法在Object类中已经定义了,在GeometricObject中再写一个方法方法进行覆盖,按照如下的代码:

  

Object O = new GeometricObject;
System.out.println(o.toString());

上面的例子中o调用的方法是哪个的toString()。为了研究这个问题,可以想到两个方面。比如说我们日常生活中,常常会声明“xxx是xxx,做出某某声明,但是实际上的是???”

出现某些事情影响到某机构,然后会有官方声明。所以就是两个方面,声明xxx,实际上xxx,Java中的思想,就是declare type和actual type就是声明类型和实际类型,变量必须声明一个类型变量的类型叫做它的声明类型,上面例子中的O的类型就是Object,如果遇到实际类型,实际类型根据变量的类进行参考,因此O的实际的类型是GeometricObject类,这就是动态绑定。(动态系统?声明一个类,然后具体由它的子类极性实现,生成的对象根据具体情况下的子类进行生成,此时对象和子类绑定起来)以后在遇到很多对象都是由不同的子类生成的,这些对象分别绑定了它的类:

  

7.描述解释为什么向下转型是必须的

  前面用的例子用比较专业的术语而言就是转型,将某种xxx类型转为下一类型,将某个变量从最初的类型转为实际的类型。将某个对象转为实际使用时候的对象。就像前面写的语句: Object o = new student();就是隐式类型转换,在C语言中也有这种类型转换,比如我们以前遇到的 int a = (int) b;某种类型转换。同样的赋值操作,如果说是数值的赋值操作 a=b;进行类比 有没有对象的类似赋值的操作  student b = o; 此时就出错了。很像前面提到的"XXX是XXX"的一种关系,而且这种关系不可逆。

  考虑以下的例子

 

object myObject = new Circle();
if(myObject instanceof Circle){
System.out.println("The Circle diameter is "+((circle)myObject).getDiameter());
...
}

myObject 变量声明的时候是Object类,声明类型决定了哪种方法会在编译的时候匹配,使用myObject.getDiameter()将会造成编译错误,因为Object类并没有getDiameter方法。编译的时候编译器找不到匹配的方法,所以要告诉编译器xxx是xxX的具体实例。为了更好理解转型,可以按照一下的想法进行思考:水果:苹果和橘子, fruit --superclass , Apple --subclass, Orange --subclass,Apple 是水果,所以能够安全地使用fruit的变量,然而fruit不是水果,所以在使用的时候要隐式类型转换。

8.在Object类中探索equals 方法

  Object 类中也有equals的方法:语法如下

  public boolean equals(Object o);

  使用的时候:

  object1.equals(object2);

默认的实现为:

  

public boolean equals(Object obj){
return (this == obj);
}

这个实现过程检查两个形参变量是否指向相同对象,此时使用的是==,在自己写的类中也可以进行重定义。

笔记:

  ==符号适用与比较两个最初的数据类型,确定两个变量是否有相同的参考,equals方法是为了测试两个对象是否有相同的内容。==操作符的优先级高于equals方法,因为==是检查是否指向相同的对象。

注意:

  在子类中使用 equals(SomeClassName obj)(也就是 equals(Circle c))来覆盖是常见的错误,具体使用在以后的笔记中会涉及到。

Java学习笔记--继承和多态(中)的更多相关文章

  1. Java学习笔记--继承和多态(下)

    1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...

  2. Java学习笔记--继承和多态(上)

    1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...

  3. java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

  4. Java学习笔记——继承、接口、多态

    浮点数的运算需要注意的问题: BigDecimal operand1 = new BigDecimal("1.0"); BigDecimal operand2 = new BigD ...

  5. Java学习笔记---继承和super的用法

    自从换了个视频教学,感觉比原来那个好多了,就是学校网速太渣,好多视频看一会卡半天,只能先看看已经下载的了. 不过也好,虽然不能从开始开始重新开,但是已经看过一次,在看一次也是好的,就当巩固学习了. 继 ...

  6. Java学习笔记(十一)面向对象---多态

    多态的体现 父类的引用指向了自己的子类对象. 父类的引用也可以接受自己的子类对象. 代码体现 abstract class Animal { public abstract void eat(); } ...

  7. java学习笔记 --- 继承

    继承 (1)定义:把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系,    这多个类就具备了这些内容.这个关系叫继承.  (2)Java中如何表示继承呢?格式 ...

  8. Java学习笔记 抽象类 接口 多态

    instanceof 对象名 instanceof 类名 该对象是否属于该类 Animal animal = new Dog(); if(animal instanceof Dog){ Dog d = ...

  9. 【Java学习笔记之八】JavaBean中布尔类型使用注意事项

    JavaBean是一个标准,遵循标准的Bean是一个带有属性和getters/setters方法的Java类. JavaBean的定义很简单,但是还有有一些地方需要注意,例如Bean中含有boolea ...

随机推荐

  1. c++ 用new后delete,而继续输出指针后果 new/new[]/delete/delete[]区别

    #include<iostream> #include<cstring> #include <string.h> int main(){ ]; ;i<;i++ ...

  2. RxJS的基础

    RxJS是一个强大的Reactive编程库,提供了强大的数据流组合与控制能力,但是其学习门槛一直很高,本次分享期望从一些特别的角度解读它在业务中的使用,而不是从API角度去讲解. RxJS简介 通常, ...

  3. Build SSH for Development on Windows Subsystem for Linux

    It seems that Windows Subsystem for Linux (WSL) is getting much more mature than the time when it fi ...

  4. Python翻译器

    import urllib.request import urllib.parse import json content='有了我,翻译再也不是问题啦' print(content) while c ...

  5. SP16549 QTREE6 - Query on a tree VI LCT维护颜色联通块

    \(\color{#0066ff}{ 题目描述 }\) 给你一棵n个点的树,编号1~n.每个点可以是黑色,可以是白色.初始时所有点都是黑色.下面有两种操作请你操作给我们看: 0 u:询问有多少个节点v ...

  6. 解决三星官方移植的内核默认是没有打开支持V4L USB devices

         在linux比较新的kernel,都标配了各类摄像头的驱动支持,不用我们自己移植驱动,只需通过make menuconfig配置内核支持我们所需的摄像头类型即可.以下是在三星官方内核中配置V ...

  7. [转载]sscanf函数

    来源:http://c.biancheng.net/cpp/html/296.html 头文件:#include <stdio.h> sscanf()函数用于从字符串中读取指定格式的数据, ...

  8. xshell一直连接中断 守护进程

    last指令 重新登录使用last指令查看登录情况 pts的理解 who:查看目前有谁在线 pts是所谓的伪终端或虚拟终端,具体表现就是你打开一个终端,这个终端就叫pts/0,如果你再打开一个终端,这 ...

  9. angularJs实现修改功能

    思路: 对表单中内容进行修改,首先需要获取这个内容,再进行修改,再清空弹窗中的内容 //查询实体 $scope.findOne=function(id){ $http.get('../brand/fi ...

  10. mybatis插入是返回主键id

    <!-- 插入数据:返回记录的id值 --> <insert id="insertOneTest" parameterType="org.chench. ...