目录
#类与类之间的关系
1.类的关联关系
1)两个类之间的简单关联表示了两个同等地位类之间的结构关系。当你想要表示结构化关系时使用关联
2)关联表示has-a关系,如学生拥有一个课程,往往表现为B作为A的属性存在(A关联B)
2.一对一及一对多关系
1)最典型的一对一关系莫过于人和证件之间的关联,例如:一个人只能有一个驾照,而一个驾照只能归属与一个人
2)人还可以跟其他事物构建一对多的关联关系,比如将驾照换为荣誉证书,那么一个人可以有多个荣誉证书,我们可以使用数组或集合来描述这个关系
3.依赖关系
1)依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的事物,反之不成立
2)此关系最为简单,也最好理解,所谓依赖就是某个对象的功能依赖于另外的某个对象,而被依赖的对象只是作为一种工具在使用,而并不持有对它的引用
3)依赖体现了“ use a”关系
4) 依赖关系一般使用方法的参数体系
人买票,只能买开发购买的车票,那么此时管理员需要修改车票的状态,此时可以把车票作为方法的参数使用,体现了类与类之间的依赖关系。
#包和访问权限修饰符
1.包的访问
1)导入外部包的某一个类,关键字“import”
例如:import com.bb.Student;
2)导入外部包的所有类,关键字“import”
例如:import com.bb.*;
2.权限访问修饰符
Java语言有四个权限访问修饰符,权限从大到小依次为:
1)public :公共权限 修饰类、属性、方法 可以被任意类访问
2)protected:受保护的权限 修饰属性、方法 可以被同包类访问,如果不是同包类,必须是该类的子类才可以访问。
3)default:同包权限 修饰类、属性、方法 只能被同包的类访问
4)private:私有权限 修饰属性、方法 只能在本类中访问
#关键字
一、this关键字
1.this关键字的作用:表示对当前对象的引用
2.his关键字的用法:
访问成员变量:this.成员变量名
访问构造方法:this(形参列表) 注意:必须在方法的第一行
访问成员方法:this.方法名(); 注意:不可以出现在静态static方法或者代码块
1)this引用成员变量示例
2)this引用构造方法示例
3)this引用成员方法示例
二、abstract关键字
1.含义:说不明白的事情用抽象来描述,在类中声明一个方法,不给他实现。
2.abstract他可以修饰什么?
1)修饰类
语法格式:访问权限修饰符 abstract class 类名{}
2)修饰方法:
语法格式:访问权限修饰符 abstract 返回值类型 方法名();
注意:
1)如果类中的方法是抽象的,那么这个类一定是抽象类。
2)抽象方法是没有方法体的,只可以被重写。
3)抽象的类就是用来被继承的。
抽象类可以继承普通类与抽象类。
4)如果这个类是抽象类,那么子类一定要重写父类的方法,除非子类也是抽象类。
5)抽象类不可以被实例化,也就是不可以用new创建对象 ,但可以有构造方法。
6)抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,否则该子类也是抽象类。
7)用abstract修饰的类就是抽象类。抽象方法必须定义在抽象类中。但是抽象类中不一定有抽象方法。
8)抽象类可以有成员属性和非抽象的成员方法。
3.abstract与其他修饰符的关系
1)final与abstract不能共存:
final:它的作用 修饰类代表不可以继承 修饰方法不可重写
abstract修饰类就是用来被继承的,修饰方法就是用来被重写的。
2)static与abstract不能共存:
static修饰的方法可以用类名调用,对于abstract修饰的方法没有具体的方法实现,所以不能直接调用,也就是说不可以与static共存。
3)private与abstract不能共存: private修饰的只能在本类中使用,abstract方法是用来被子类进行重写的,有矛盾所有不能共存.
三、static关键字
1.定义
1)static被称为静态,可以用来修饰类的属性或者方法。
2)如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,被static修饰的属性被称为静态属性,被static修饰的方法被称为静态方法。
3)static属性可以使用对象调用,也可以直接用类名调用。
4)静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个。
2.可以修饰什么?
1)修饰属性 访问权限修饰符 static 数据类型 属性名;
示例:
2)修饰方法 访问权限修饰符 static 返回类型 方法名();
3.静态方法-总结
1)本类的方法之间的调用
静态方法可以被任何方法(静态方法和非静态方法)直接调用;
非静态方法可以被非静态方法直接调用;
非静态方法不能被静态方法直接调用,需要创建对象,用对象名调用。
2)不同类方法之间的调用
调用静态方法,使用类名直接调用 ;
非静态方法不能直接调用,需要创建对象,用对象名调用。
4.静态代码块
static代码块:
随着类的加载而加载,只执行一次
用于给类进行初始化
四、interface关键字(接口)
1.定义
接口(interface):在java中接口主要是使用来拓展定义类的功能,可以弥补Java中单继承的缺点。
接口的定义
java接口是一系列方法的声明,是一些抽象的集合,一个接口只有抽象方法没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 简单地说,接口就是特殊的抽象类,即所有方法都是抽象方法的抽象类就是Java中的接口。
2.接口的格式
接口中的成员修饰符是固定的:
1)public static final 修饰的变量变常量,该值不能改变,只能读
2)修饰符:可选,用于指定接口的访问权限,可选值为public。即使省略,也依然是public。
3)接口名:必选参数,用于指定接口的名称,接口名必须是合法的Java标识符。一般情况下,要求首字母大写
4)方法:接口中的方法只有定义而没有被实现。
3.类与接口的关系
类和接口是实现关系,实现类的声明形式如下:
1)类与接口之间是实现关系,类实现接口。
2) 接口不可以被实例化。
3) 实现了接口的实现类必须重写接口中所有抽象方法后,这个子类才可以被实例化,否则报错。
4) 一个类可以实现多个接口,多个接口用逗号分隔,也可以不实现接口。
5) Java不支持多继承,Java将多继承机制进行改良变成了多实现。
6) 一个类在继承另一个类同时,还可以实现多个接口 。
7) 接口的出现避免了单继承的局限性。
类实现接口的示例:
4.接口和接口的关系
接口和接口之间是继承关系
接口与接口之间是继承关系,而且可以多继承
接口的出现避免了单继承的局限性
5.接口与抽象类的区别
在Java中接口是一个比抽象类更加抽象的概念,由于只声明行为,因此在接口中的方法均是抽象的,下表中罗列了接口和抽象类的差异:
1) 抽象类体现继承关系,一个类只能单继承
2) 接口体现实现关系,一个类可以多实现
3) 抽象类是继承 is a关系 (所属关系)在定义该体系的基本共性内容
4)接口是实现是like a关系(不所属关系)在定义该体系额外功能
相同点:不能实例化对象;
6.接口可实现多继承原因
1)接口继承与类继承对比: Java类的继承是单一继承,Java接口的继承是多重继承
2)接口可实现多继承原因分析:
不允许类多重继承的主要原因是,如果A同时继承B和C,而B和C同时有一个D方法,A无法确定该继承那一个
接口全都是抽象方法,不存在实现冲突,继承谁都可以,所以接口可继承多个接口
五、final 关键字
1.final的定义
在Java中,final关键字有最终的,不可修改的含义
final 用于声明属性,方法和类
属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改。
方法:定义必须有实现代码,并且子类里不可被覆盖。
类:不能被定义为抽象类或是接口,不可被继承。
2.final修饰属性
如果某个变量被final修饰,那么该变量就成为常量,不能被修改,一般语法:
常量在声明时必须初始化,声明之后不能对其进行二次赋值,其后任何试图对常量进行赋值的语句都将报错。
赋值两种方式:构造方法赋值和声明时等号赋值 一些数学定理中的常量经常使用final修饰
eg:π= 3.14159265358979; E= 2.718281828459045;
示例:
对参数做final修饰
在方法参数前面加final关键字,为了防止数据在方法体中被修改。
3.final修饰方法
如果将某个成员方法修饰为final,则意味着该方法不能被子类覆盖,这就和抽象方法必须由子类实现的规定互相矛盾,因此,final和abstract不能同时修饰一个方法
final方法的一般声明格式是:
示例:
如果将某个类修饰为final,则说明该类无法被继承,一般语法:
示例:
Java中有一个最常用的final类:java.lang.String