JAVA 学习日记(3).OOP继承,java.util包,OOP接口实现多态,输入输出流,

1.继承
继承的概念:
在 java 中,类可以继承自另一个类。衍生的类(子类)继承父类的方法和数据成员。
最高层是最普遍的、最一般的情况,往下每一层都比上一层更具体,并包含有高层的特征,通过这样的层次结构使下层的类能自动享用上层类的特点和性质;继承其实就是自动地共享基类中成员属性和成员方法的机制。

面向对象的程序设计有三大特征:
封装:解决了数据的安全性问题。
继承:解决了代码的重用问题。
多态:解决了程序的扩展问题。

实现继承的一般语法是:
在Java中实现继承需要使用到extends关键字;
[访问修饰符] class 派生类名 extends 基类名 {
成员列表
}
如:
class Student extends Person
{
……
}

继承的作用:
当今软件设计的特征:
软件规模越来越大;
软件设计者越来越多;
软件设计分工越来越细。
引入继承,实现了代码重用;
引入继承,实现了递增式的程序设计。
继承是能自动传播代码和重用代码的有力工具;
继承能够在某些比较一般的类的基础上建造、建立和扩充新类;
能减少代码和数据的重复冗余度,并通过增强一致性来减少模块间的接口和界面,从而增强了程序的可维护性;
能清晰地体现出类与类之间的层次结构关系。

继承的注意事项:
继承是单方向的,即派生类可以继承和访问基类中的成员,但基类则无法访问派生类中的成员;
在Java中只允许单一继承方式,即一个派生类只能继承于一个基类,而不能象C++中派生类继承于多个基类的多重继承方式。

类成员的访问控制权限:
信息隐藏是面向对象程序设计的重要特点之一,它可以:
防止类的使用者意外损坏数据;
对任何实现细节所作的修改不会影响到使用该类的其它代码;
使类更易于使用。
在Java中实现信息隐藏的是访问控制权限机制;
访问控制权限包括4个访问修饰符:public、protected、private和缺省;
可以使用上述访问修饰符修饰类的成员。

访问修饰符:
public:不受任何限制,本类或非本类均可随意访问。
protected:本类及其子类可以访问(父子友好),同一个包中的其它类也可访问(包内友好)。
缺 省:只有相同包中的类可以访问(包内友好)。
private:只有本类可以访问,其余都不可以。

类的访问权限:
还可以在定义类时为类添加访问修饰符,对类进行访问权限控制;
对类使用的访问修饰符只有public和缺省两种;
被public修饰的类可以从任何地方访问,不受限制;
不加访问修饰符,缺省修饰的类只能从本包中访问,不同包则无法访问到;
但要注意的是:在一个源文件中只能有一个被public修饰的类,并且文件名必须与public的类同名;
如果要定义多个public的类,则必须分别写在不同的源文件中,一个源文件只写一个类是良好的编程习惯。

继承中的构造方法:
父类中的构造方法不能被子类继承,即便它是public的;
父类的构造方法负责初始化属于它的成员变量,而子类的构造方法则只需考虑属于自己的成员变量,不必去关注父类的情况。

构造方法的执行顺序:
当实例化子类的对象时,必须先执行父类的构造方法,然后再执行子类的构造方法;
如果父类还有更上级的父类,就会先调用最高父类的构造方法,再逐个依次地将所有继承关系的父类构造方法全部执行;
如果父类的构造方法执行失败,那么子类的对象也将无法实例化。

super关键字的用途:
在Java中,super关键字有两个主要用途;
第一种用途是:在子类的构造方法中,super关键字可以显式地调用父类的构造方法,用于将参数传递给它;
其一般语法是:
super(实际参数);
需要注意的是:该语句必须是子类构造方法的第一条语句。
如果父类和子类中有同名成员,在子类中默认访问是属于自己的那一个成员;
super关键字可以明确地指定要访问父类中的成员;
其一般语法是:
super.成员名;
前提条件是:父类中的该成员不是private的。

super与this:
this关键字有两种意义:
表示一个指向“implicit parameter”的引用
调用本类中的另一个构造器
super关键字也有两种意义:
调用父类的方法
调用父类的构造器
但是,super并不表示一个指向对象的引用,它只是一个特殊的关键字,用来告诉编译器,现在要调用的是父类的方法。

2.java.util包
java.util包简介:
java.util包是Java内置的一个工具包,其中包含一系列常用的工具类;
如处理日期和日历的类以及一些集合类;
java.util包不会默认导入,如果要使用到该包中的类,则必须在程序的开始部分显式地声明如下语句:
import java.util.*;

集合:
集合是将多个元素组成一个单元的对象;
类似于数组,但数组最大的缺点是:长度受到限制(一经创建,就不可再改变),并且只能存放相同数据类型的元素;
集合的长度没有限制,可以存放任意多的元素,而且元素的数据类型也可以不同;
集合还提供一系列操纵数据的方法,如存储、检索等等。

集合框架的优点:
提供有用的数据结构和算法,从而减少编程工作;
提高了程序速度和质量,因为它提供了高性能的数据结构和算法;
允许不同 API 之间的相互操作,API之间可以来回传递集合;
可以方便地扩展或改写集合。

ArrayList类:
ArrayList是长度可变的对象引用数组,称为动态数组;
随着元素的添加,元素数目的增大,数组容量也会随之自动扩展;
访问和遍历数组元素时,ArrayList的性能优越;
ArrayList类继承了AbstractList类并实现了List接口。

ArrayList类的构造方法:
ArrayList类的构造方法有3种重载方式。
ArrayList() 创建一个空的ArrayList对象
ArrayList(Collection c) 根据指定的集合创建ArrayList对象
ArrayList(int initialCapacity ) 使用给定的大小创建ArrayList对象

3.接口
接口的概念:
一个Java接口是一些方法特征的集合,但没有方法的实现。
Java接口中定义的方法在不同的地方被实现,可以具有完全不同的行为
可以使用Java接口标识类型
运行时,根据实际创建的对象类型调用相应的方法实现

什么是面向接口编程:
开发系统时,主体构架使用接口,接口构成系统的骨架。
这样就可以通过更换接口的实现类来更换系统的实现。

4.输入输出流
java.io包简介:
java.io包也是Java内置的包,其中包含一系列对文件和目录的属性进行操作,对文件进行读写操作的类;
程序中如果要使用到该包中的类,对文件或流进行操作,则必须显式地声明如下语句:
import java.io.*;

File类:
File类的对象不但可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录;
当创建一个文件对象后,就可以利用它来对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等等;
需要注意的是,File对象并不能直接对文件进行读/写操作,只能查看文件的属性。

File类的构造方法:
File(String pathname) 指定文件(或目录)名和路径创建文件对象

File类中的常用方法:
boolean exists() 判断文件是否存在,存在返回true,否则返回false
boolean isFile() 判断是否为文件,是文件返回true,否则返回false
boolean isDirectory() 判断是否为目录,是目录返回true,否则返回false
String getName() 获得文件的名称
String getAbsolutePath() 获得文件的绝对路径
long length() 获得文件的长度(字节数)
boolean createNewFile()
throws IOException 创建新文件,创建成功返回true,否则返回false,有可能抛出IOException异常,必须捕捉
boolean delete() 删除文件,删除成功返回true,否则返回false
File[] listFiles() 返回文件夹内的子文件与子文件夹的数组

stream(流):
流是指一连串流动的数据信号,是以先进先出的方式发送和接收数据的通道。

流的类型:
根据流动方向的不同,流分为输入流和输出流;
对于输入和输出流,由于传输格式的不同,又分为字节流和字符流:
字节流是指8位的通用字节流,以字节为基本单位,在java.io包中,对于字节流进行操作的类大部分继承于InputStream(输入字节流)类和OutputStream(输出字节流)类;
字符流是指16位的Unicode字符流,以字符(两个字节)为基本单位,非常适合处理字符串和文本,对于字符流进行操作的类大部分继承于Reader(读取流)类和Writer(写入流)类。

使用FileInputStream类读文件:
FileInputStream类称为文件输入流,继承于InputStream类,是进行文件读操作的最基本类;
它的作用是将文件中的数据输入到内存中,我们可以利用它来读文件;
由于它属于字节流,因此在读取Unicode字符(如中文)的文件时可能会出现问题。

FileInputStream类的构造方法:
FileInputStream(File file)
throws FileNotFoundException 使用File对象创建文件输入流对象,如果文件打开失败,将抛出异常
FileInputStream(String name)
throws FileNotFoundException 使用文件名或路径创建文件输入流对象,如果文件打开失败,将抛出异常

FileInputStream类的常用方法:
int read()
throws IOException 读取文件中的数据,一次读取一个字节,读取的数据作为返回值返回,如果读到文件末尾则返回-1,有可能抛异常,必须捕捉
int read(byte[] b)
throws IOException 读取文件中的数据,将读到的数据存放到byte型数组中,并返回读取的字节的数量,未读到数据返回-1,有可能抛异常,必须捕捉
void close()
throws IOException 关闭流对象,有可能抛异常,必须捕捉

使用FileOutputStream类写文件:
FileOutputStream类称为文件输出流,继承于OutputStream类,是进行文件写操作的最基本类;
它的作用是将内存中的数据输出到文件中,我们可以利用它来写文件。

FileOutputStream类的构造方法:
FileOutputStream类的构造方法有5种重载方式,以下是常用的几种。
FileOutputStream(File file)
throws FileNotFoundException 使用File对象创建文件输出流对象,如果文件打开失败,将抛出异常
FileOutputStream(File file, boolean append)
throws FileNotFoundException 使用File对象创建文件输出流对象,并由参数append指定是否追加文件内容,true为追加,false为不追加,异常情况同上
FileOutputStream(String name)
throws FileNotFoundException 直接使用文件名或路径创建文件输出流对象,异常情况同上
FileOutputStream(String name, boolean append)
throws FileNotFoundException 直接使用文件名或路径创建文件输出流对象,并由参数append指定是否追加,异常情况同上

FileOutputStream类的常用方法:
void write(int b)
throws IOException 往文件中写数据,一次写一个字节,有可能抛异常,必须捕捉
void write(byte[] b)
throws IOException 往文件中写数据,将byte数组中的数据全部写入到文件中,有可能抛异常,必须捕捉
void close()
throws IOException 关闭流对象,有可能抛异常,必须捕捉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值