一、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)接口,接口是不允许继承抽象类的,但一个接口可以继承多个接口。

实现接口也需覆写里面的抽象方法。































相关文章: