一、封装

概念:

将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

实现步骤:

修改属性的可见性——设为private。

创建getter/setter方法——用于属性的读写。

在getter/setter方法中加入属性控制语句——对属性值的合法性进行判断。

包:

作用:

管理Java文件;解决同名文件冲突。

定义名:

package 包名

必须放在Java源程序的第一行,包名间可以用“.”隔开。

系统中的包:

java.(功能).(类)

java.lang.(类)——包含Java语言基础的类

java.util.(类)——包含Java语言中各种工具类

java.io.(类)——包含输入、输出相关功能的类

包的使用:

(1)import 包名

(2)Java中包的命名规范是全小写字母拼写

(3)~~.*——加载其下所有文件

访问修饰符:


可以修饰属性和方法的访问范围。



访问修饰符

本类

同包

子类

其他

private


 

 

 

默认



 

 

protected




 

public













this关键字:


1、this关键字代表当前对象。 this.属性——操作当前对象的属性。this.方法——调用当前对象的方法。


2、封装对象属性的时候,经常会使用this关键字。


内部类:

定义:


内部类(Inner Class)就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。


作用:


1、内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一包中的其他类访问该类。


2、内部类的方法可以直接访问外部类的所有数据,包括私有的数据。


分类:


成员内部类、静态内部类、方法内部类、匿名内部类。


****要使用内部类的方法时,首先创建一个外部类对象,通过 外部类对象.new 内部类() 形式创建内部类对象,最后调用内部类方法。****


成员内部类(普通内部类):


1、定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象,即:内部类 对象名=外部类对象.new 内部类();


2、成员内部类的.class文件:外部类名$内部类名.class


3、如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量或方法需使用this关键字(外部类.this.成员变量/方法)。


静态内部类(static修饰的内部类):


1、静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问。


2、若外部类的静态成员和内部类的成员名称相同,可通过 类名.静态成员 访问外部类的静态成员;若不相同,则可通过 成员名 直接调用外部类的静态成员。 3、创建静态内部类对象时,不需要外部类的对象,直接“内部类 对象名=new 内部类(); ”


方法内部类(内部类定义在外部类的方法中,方法内部类只在该方法内可以使用):


1、方法内部类不能使用访问控制符和static修饰符。


二、继承(类与类的一种关系,Java中的继承是单继承)

优势:


子类拥有父类的所有属性和方法(private修饰的无效);实现代码复用。


语法规则:


class 子类 extends 父类


方法的重写:


如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法。返回值类型、方法名、参数类型和个数都要与父类的方法相同才叫方法的重写。


继承的初始化顺序:


初始化父类再初始化子类;先执行初始化对象中属性,再执行构造方法中的初始化。


final关键字:


final可以修饰类、方法、属性和变量。


final修饰类,则该类不允许被继承。


final修饰方法,则该方法不能被重写。


final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)。


final修饰变量,则该变量的值只能赋一次值,即变为常量。


super关键字:


在对象的内部使用,可以代表父类对象。


访问父类的属性:super.age


访问父类的方法:super.eat()


如果子类构造方法中既没有显式调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错。


object类:

object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承object类。
tostring()方法:返回对象的哈希码(对象地址字符串),可以通过重写tostring()方法表示出对象的属性。
equals()方法:比较的是对象的引用是否指向同一个内存地址。一般情况下比较两个对象时比较的是值是否一致,所以要进行重写。

三、多态(继承是多态的实现基础)

对象的多种形态:

1、引用多态:


父类的引用可以指向本类/子类的对象。


2、方法多态:


创建本类对象时,调用的方法为本类方法。


创建子类对象时,调用的方法为子类重写的方法或者继承的方法。


引用类型转换:


1、向上类型转换(隐式/自动类型转换),是小类型到大类型的转换。


2、向下类型转换(强制类型转换),是大类型到小类型的转换。


3、instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。


抽象类(abstract class):

1、语法定义:


抽象类前用abstract关键字修饰,则该类为抽象类。


2、应用场景:


a、某些情况下,某个父类只知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。


b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。


3、作用:


限制规则子类必须实现某些方法,但不关注实现细节。


4、使用规则:


a、abstract定义抽象类。


b、abstract定义抽象方法,只是声明,不需要实现。


c、包含抽象方法的类是抽象类。


d、抽象类中可以包含普通的方法,也可以没有抽象方法。


e、抽象类不能直接创建,可以定义引用变量。


接口:

1、接口概念:


接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成。类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类必须提供某些方法。


2、接口定义:


和类定义不同,定义接口不再使用class关键字,而是使用interface关键字。


[修饰符] abstract interface 接口名[extends 父接口1,父接口2...]


{


零个到多个常量定义...


定个到多个抽象方法的定义...


}


接口就是用来被继承,被实现的,修饰符一般是public,不能使用private和protected修饰接口。


接口中的方法都是抽象方法。


接口中方法不能有方法体。//void geta();


3、使用接口:


一个类可以实现一个或多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。


继承父类实现接口的语法为:


[修饰符] class 类名 extends 父类 implements 接口1,接口2...



{



类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中的抽象方法



}


如果要继承父类,继承父类必须在实现接口之前。


接口在使用过程中经常与匿名内部类配合使用。


匿名内部类就是没有名字的内部类,所用于关注实现而不关注实现类的名称。


Interface i=new Interface() 

 
{ 

 
public void method(){ 

 
~~ 

 
} 

 
}


四、UML


Unified Modeling Language(统一建模语言/标准建模语言)是一种支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持。


常用UML图——用例图、序列图、类图


常用建模工具——Visio、Rational Rose、PowerDesign