此对象非彼对象(面向对象)2

java13面向对象深入2

大纲

此对象非彼对象(面向对象)2

格式

一般的命名为:公司域名倒写+功能名|模块名。

package 语句作为 Java 源文件的第一条语句,指明该文件中定义的类所在的包。(若缺省该语句,则指定为无名包)。

例:

Java 编译器把包对应于文件系统的目录管理,package 语句中,用’.’来指明包(目录)的层次,例如使用语句: package com.java01 ,则该文件中所有的类位于.comjava01 目录下

注意:

  • 不要定义与 jdk 相同的包,相同的类,否则会引起很多你觉得莫名其妙的问题
  • 写项目时都要加包,不要使用默认包。
  • com.oop和com.oop.test,这两个包没有包含关系,是两个完全独立的包。只是逻辑上看起来后者是前者的一部分。

import

如果一个类存在包名,则在其他包下使用该类时,必须使用全额限定名(简称全名或完整类名,com.java01.MyClass),编译器才能找到该类;也可以使用 import 在文件的开头引入要使用到的类。

不需要使用 import 的类有:

  1. 语言包 (java.lang)下的类 (String,System…)

  2. 同包下的类

静态导入:
import 语句不仅可以导入类,还增加了导入静态方法的功能

总结

  • 如果想将一个类放入包中,在类的源文件首行使用package

  • 必须保证该类的 class 文件位于正确的目录下

  • 另外的类想访问的话:

    1. 写全名
    2. 引入
      • 模糊匹配(会将该包下所有用到的类引入进来),会降低编译速度,但是不会影响运行速度
      • 具体类名
      • 静态导入
    3. 同包下的类不需要导入

JDK 中常用的包简单介绍:

  1. java.lang –语言包:语言中常用的功能,如:String、Math、System、Integer、Thread…

  2. java.util – 工具包:提供一些实用的工具类,如:容器(List、Set、Map…),日期类

  3. java.io – 输入输出包:提供操作读取文件的相关类,如:File、InputStream、OutputStrem…

  4. java.net – 网络包: 操 作 远 程 资 源 的 类 , 如:InetSocketAddress、 DatagramPacket、 ServerSocket…

  5. java.sql – 数据库包:操作JDBC的类,Connection、Statement、ResultSet….

垃圾回收机制(gc)

概述

Garbage Collection 垃圾回收机制

每个程序员都遇到过内存溢出的情况,程序运行时,内存空间是有限的,那么如何及时的把不再使用的对象清除将内存释放出来,这就是GC要做的事。

说起垃圾回收机制(GC),大部分人都把这项技术当做Java语言的伴生产物。事实上,GC的历史比Java久远,早在1960年Lisp这门语言中就使用了内存动态分配和垃圾回收技术。

此对象非彼对象(面向对象)2

2)启动调试

Eclipse提供几种方式来启动程序(Launch)的调试,分别是通过菜单(Run –> Debug)、图标(“绿色臭虫”)、右键->Debug As。

此对象非彼对象(面向对象)2

3)单步执行

主要使用前面讲过的几个视图进行调试,其中debug视图中的几个按钮有快捷键:

Step Return(F7) : 表示退出当前方法,返回到调用层。

Step Over (F6) : 表示运行下一行代码。

Step Into (F5) : 表示进入当前方法。

此对象非彼对象(面向对象)2
继承:子承父业

继承的本质在于抽象。类是对对象的抽象,继承是对某一批类的抽象,从而实现对现实世界更好的建模。

继承的作用 : 使用继承可以提高代码的复用性。

如何使用继承:

父类|超类|基类:根据一些列子类抽象,抽取像的部分,定义在父类中

子类|派生类:子类继承父类,有权使用父类中的内容,可以定义子类新增内容,所以说子类是父类的延续+扩展

extends 关键字的意思是“扩展”。子类是父类的扩展。

java 中使用 extends 关键字实现类的继承机制,语法规则:

注意:

  • 子类继承父类的成员变量和成员方法,但不继承父类的构造方法
  • java中只有单继承 ,没有像c++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。就像我们现实中,如果你有多个父母亲,那是一个多么混乱的世界啊。多继承,就是为了实现代码的复用性,却引入了复杂性,使得系统类之间的关系混乱。
  • java中的多继承,可以通过接口来实现
  • 如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object。

继承的特点:

优点:

  • 通过继承可以简化类的定义,实现代码的重用|提高代码复用性
  • 可以更好的扩展程序
  • 子类一旦继承父类,可以有权使用父类中的成员,也可以扩展定义子类独有内容
  • java是单继承继承,实现简单

缺点:

  • 子类与父类之间紧密耦合(耦合度高),子类依赖于父类的实现,子类缺乏独立性。
  • 不便于后期维护
  • 单继承一个子类只能有一个父类,不够灵活,不便于后期维护

super关键字

super

super是指向父类的引用。

super可以在子类构造器中调用父类某个构造器

如果构造方法没有显示地调用父类的构造方法,那么编译器会自动为它加上一个默认的super()方法调用。如果父类由没有默认的无参构造方法,编译器就会报错,super()语句必须是构造方法的第一个子句。

super可以用来区分子父类中同名成员

如果不存在同名问题,可以直接在子类中调用父类内容,super默认省略

如果存在同名问题,在子类中调用同名成员,默认this.恒源 调用当前子类同名成员,先要调用父类同名成员,必须定义为super.成员

Bird–> Animal –> Object 图形分析如下

此对象非彼对象(面向对象)2

构造方法调用顺序:

  • 根据super的说明,构造方法第一句 总是:super(…)来调用父类对应的构造方法。
  • 先向上追溯到Object,然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。

this和super之间的区别

相同点:

  1. this和super都能用来调动其他共构造器,都要在首行出现
  2. this和super都可以用来区分同名问题,不区分同名时候可以省略
  3. this和super都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句

块。

不同点:

  1. this(参数)构造器第一行调用本类中其他构造器,super(参数)构造器第一行调用父类中某个构造器
  2. this用来区分成员和局部同名问题,super用来区分子父类中同名问题

注意:

  • this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会过。

  • 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字

重写与final关键字

重写Override

父类的功能实现不满足子类的要求,可以在子类中按需改写,这就是方法的重写。

实现重写的三个条件:

  • 不同的两个类
  • 继承关系|实现关系
  • 来源:dirft_din

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年4月20日
下一篇 2020年4月20日

相关推荐