一、Java面向对象三大特征:封装、继承、多态(封装和继承几乎是为多态服务的)
1、封装:将属性、方法封装到类里,将一段逻辑封装到方法里,方便使用。也称信息隐藏,是指抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界连接,用户无法知道内部的数据和方法的实现。
优点:(1)良好的封装能减少耦合(2)类内部的结构能自由修改(3)隐藏重要信息
属性封装:private 属性类型 属性名称;
方法封装:private 方法返回值 方法名称(参数列表){ }
使用public方法调用时,对变量的读取和赋值通过getXX和setXX来完成。
注:对于私有属性要使用setter和getter方法设置和访问实际上还有一个原因,就是在java中存在反射机制,在各类程序中,反射机制都会利用setter和getter设置和取得属性内容。在以后的开发中,类中的属性都必须封装,封装之后的属性必须用setter和getter方法进行访问。
2、继承:继承关系是传递的,子类从父类里继承过来方法和属性。继承避免了一般类和特殊类之间共同特征进行重复描述,减少了代码的冗余,大大增加了程序的利用率。
特点:(1)关键字extends表示继承关系。例:public class B extends A{ }
(2)所有引用类型的父类都是Object,或是直接关系,或是间接关系
(3)java语言中支持的是单继承,子类只能有一个父类,父类可以有多个子类,子类会继承父类的属性和方法,可以不用写。
方法覆写(override):
(1)父子类关系,方法名、参数列表、返回值相同(返回值类型只能是父类的类型或者子类型)
(2)修饰词,子类方法不能缩小父类方法的访问权限,只能增大范围。
(3)子类方法不能抛出比父类方法更多的异常(子类方法可以不抛出异常)
(4)方法被定义为final不能被重写
(5)被覆盖的方法不能为private,否则在子类中只是新定义了一个方法,并没有对其进行覆盖。
super关键字:使用super关键字可以从子类中调用父类中的构造方法、普通方法、和属性。
注:构造器不能被继承,子类的构造器建立在父类的构造器的基础上。子类的构造器会默认调用父类的无参构造器 super(); , 当父类中没有无参构造器(一个类中创建一个构造方法,无论是否能有参,默认构造方法都失效),必须在子类中手动调用父类中第一个构造器super(有参传参),必须写在构造器的第一句话中,和this关键字不能同时用。
3、多态:
多态在面向对象中是一个最重要的概念,在JAVA中主要有以下两种体现形式:
(1)方法的重载和覆写
(2)对象的多态性
对象的多态性主要分为以下两种类型
①向上转型:子类对象 指向 父类对象
②向下转型:父类对象 指向 子类对象
对于向上转型,程序会自动完成,而对于向下转型时,必须明确地指向要转型的子类类型,
格式如:
对象向上转型:父类 父类对象 = 子类实例
对象向下转型; 子类 子类对象=(子类)父类实例
注:在进行对象向下转型前,必须先发生对象向上转型,否则将会出现对象转换异常 。
instanceof关键字:判断一个对象是否是一个类的实例,格式如下
对象 instanceof 类 返回boolean类型
注:在进行向下转型时,最好先使用instanceof关键字判断后再进行相应的转型操作,这样可以避免对象转换异常。
4、包及访问控制权限
(1) 包的定义 : package 包名称.子包名称
(2)import语句(类的导入):在使用不同包中的类时,就需要通过import语句导入
格式如下:
import 包名称.子包名称.类名称; 手工导入所需要的类
import 包名称.子包名称.* ; 由JVM自动加载所需要的类
两种方式的性能是一样的,因为使用*时,程序也是自动加载所需要的类
(3)系统常见包
java.lang:java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包。
java.io:java语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等。
java.util:java的实用工具类库java.util包。在这个包中,Java提供了一些实用的方法和数据结构。如java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间,
提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。包含如处理时间的date
类,处理变成数组的Vector类,以及stack和HashTable类。
java.util.zip:实现文件压缩功能。
java.lang.reflect:提供用于反射对象的工具。
java.awt.image:处理和操纵来自于网上的图片的java工具类库。
java.wat.peer:很少在程序中直接用到,使得同一个java程序在不同的软硬件平台上运行。
java.NET:实现网络功能的类库有Socket类、ServerSocket类。
java.awt.datatransfer:处理数据传输的工具类,包括剪贴板,字符串发送器等。
java.awt:构建图形用户界面(GUI)的类库,低级绘图操作Graphics类,图形界面组件和布局管理如 Checkbox类、Containter类、LayoutManger接口等,以及界面用户交互控制和事件响应,如Event类。
java.awt.event:GUI事件处理包。
java.sql:实现JDBC的类库。
(4)访问控制权限
① private
属于私有访问权限,可以用在属性的定义、方法的声明,只能在本类中访问,或使用setter和getter方法进行访问。
②default
如果一个类中的属性或方法没有使用任何的访问权限声明,则就是默认的访问权限,默认的访问权限可以被本包中的其他类所访问,但是不能被其他包的类所访问。
③protected
属于受保护的访问权限,如果一个类中的成员使用了protected访问权限,只能被本包及不同包的子类所访问。
④public
属于公共访问权限,如果一个类中的成员使用了public访问权限,就可以在所有类中被访问,不管是否在同一个包中。
(5)Java命名规范
①类:所有单词的首字母大写,如JavaTest
②方法:第一个单词的首字母小写,之后每个单词的首字母大写,如getInfo()
③属性:第一个单词的首字母小写,之后每个单词的首字母大写,如studentName
④包:所有单词的字母小写,如com.hyxy.demo
⑤常量:所有单词的字母大写,如FLAG
5、抽象类与接口
fianl关键字:
final在Java中表示的意思是最终,也可以称为完结器。可以使用final关键字声明类、属性、方法。
(1)使用final声明的类不能有子类
(2)使用final声明的方法不能被子类覆写
(3)使用final声明的变量即成为常量,常量不可修改
注:在使用final声明变量的时,要求全部的字母大写。
抽象类:在JAVA中,创建一种类专门当做父亲,类似作为“模板”,不能由抽象类创建对象,只能通过抽象类派生出来的新类,再由它来创建对象,有Java单继承的局限性。(使用abstract关键字修饰的类)
①包含一个抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法。
②抽象类和抽象方法都要使用abstract关键字声明。
③抽象方法只需声明而不需要实现,因此没有方法体。
④抽象类必须被继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法。
抽象类的定义格式:
abstract class 抽象类名称{
属性;
访问权限 返回值类型 方法名称(参数){ //普通方法
[return 返回值];
}
访问权限 abstract 返回值类型 方法名称(参数); //抽象方法
抽象方法是没有方法体的
}
注:抽象方法不要使用private声明,因为抽象方法必须被子类覆写,如果使用private声明,则子类无法覆写。
接口:接口是JAVA中最重要的概念之一,它可以被理解为一种特殊的类,是由全局变量和公共的抽象方法所组成。
接口的定义格式:
interface 接口名称{
全局常量;
抽象方法;
}
注:在接口中如果不写public,也是public访问权限。接口中的方法访问权限不管写不写都是public。
继承抽象类,实现(implements)接口,接口是不允许继承抽象类的,但一个接口可以继承多个接口。
实现接口也需覆写里面的抽象方法。