类和对象
一组组相似事务的统称类,只要有相似点的就是同一类,类只强调方法的相似性
类的基本结构
属性:对象数据的描述
方法:对象的行为
构造方法:用于实例化对象
内部类:在类中声明的类(inner class)
块:分静态块与实例块
类的声明:(访问权限修饰符public.default(可忽略不写,为默认))(修饰符final.abstract.synchronized)class 类名{ 类体 }
类的作用:类就是一个模板,定义多个对象共同的属性和方法 如:学生类(张三,李四) 手机类(华为.oppo)
类由属性,方法,构造方法和其他内容(可以是代码块**、静态代码块、内部类)构成。
其中方法的格式如下:
访问修饰符 返回值类型 方法名(形式参数列表){
Java语句;… … … //方法体
}
构造方法
构造方法的格式如下:
[修饰符] 类名(形参列表){
//n条语句
}
构造方法的四要点:
- 构造器通过new关键字调用!!
- 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
- 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加!
- 构造器的方法名必须和类名一致!
Object类
Object类是所有的类的直接或间接父类。
- 常用方法
1.重写toString方法
作用:用于显示对象的属性值,默认返回显示的是:完整的包名+类名+@+十六进制的整数。
2.重写equals方法
作用:用于去比较两个对象的属性值是否相同。
包机制
声明包:使用 package关键字
导入包:使用 import关键字
- 要点:如果导入两个同名的类,只能用包名+类名来显示调用相关类:
JDK常用的包 - java.lang (不需要手动导入,默认导入java.lang包)
( 包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。) - java.awt
( 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。) - java.net
(包含执行与网络相关的操作的类。) - java.io
(包含能提供多种输入/输出功能的类。) - java.util
( 包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。)
封装
封装是面向对象三大特征之一。对于程序合理的封装让外部调用更加方便,更加利于写作。同时,对于实现者来说也更加容易修正和改版代码。
1、封装不想让别人知道或者看到的东西2、封装属性、封装方法3、保护隐私
编程中封装的具体优点
(1)提高代码的安全性
(2)提高代码的复用性
(3)“高内聚”:封装细节,便于修改内部代码,提高可维护性。
(4)“低耦合”:简化外部调用,便于调用者使用,便于扩展和协作。
封装的步骤:
1.将属性进行private私有化
2.提供公有的取值,赋值方法
3.在赋值的方法中进行判断
JavaBean规范:
- 类使用public修饰
- 属性使用private封装
- 提供公有的getter,setter方法
- 提供无参构造方法/构造器
继承
意义:提高代码的复用性
使用extends关键字实现继承
继承一定要满足一个关系is-a的关系 “XX是XXX”
方法重写(override)
Java中只有单继承,没有像C++那样的多继承。多继承会引起混乱,使得继承链过于复杂,系统难于维护。
目的:父类提供的方法,不能满足子类的需求,子类就可以对方法进行重写 (对方法体进行重新编写)。
方法的重写需要符合下面的三个要点:1. “= =”: 方法名、形参列表相同。2. “≤”:返回值类型和声明异常类型,子类小于等于父类。3. “≥”: 访问权限,子类大于等于父类。
实现的条件:
1.在子类中
2.方法的名称、参数的类型、个数和顺序与父类中的方法完全相同
3.如果定义一个类时,没有调用extends,则它的父类是:java.lang.Object.
方法重载(overload)
实现的条件:
1.同一个类中
2.方法的名称相同
3.参数不同,类型是,个数,顺序不同
4.与返回值类型和访问权限无关
继承和组合
1.我们可以通过继承方便的复用已经定义类的代码。还有一种方式,也可以方便的实现“代码复用”,那就是:“组合”。
2.“组合”不同于继承,更加灵活。
“组合”的核心就是“将父类对象作为子类的属性”,然后,“子类通过调用这个属性来获得父类的属性和方法”。
super关键字
作用:
- 可以用于区分父类和子类的同名属性
- 调用父类的属性或父类的方法,super也可以省略不写
- 调用父类的构造方法 super(), super(…),要求必须是子类构造方法中第一句代码
多态
**要求:多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
意义:提高程序的可扩展性和可维护性
概念:同一个方法调用,由于对象不同可能会有不同的行为。
实现多态的步骤:
1.继承父类
2.重写子类
3.父类引用,指向子类对象
对象转型:
- 向上类型转换:子类转成父类
- 向下类型转换:父类转成子类
抽象
- 抽象方法
概念:使用abstract修饰的方法,没有方法体,只有声明。 - 抽象类
概念:
1. 1.有抽象方法的类只能定义成抽象类
1. 2.抽象类不能实例化,即不能用new来实例化抽象类。
1. 3.抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。
1. 4.抽象类只能用来被继承。
1. 5.抽象方法必须被子类实现。
特征:
抽象类不能创建对象 ,不能 new
可以含有0个或多个抽象方法
要点:
1. 抽象方法和抽象类均必须用abstract来修饰。
2. 抽象方法没有方法体,只需要声明不需实现。
3. 抽象类可以包含属性、方法、构造方法。
4. 抽象类不能实例化,及不能用new来实例化抽象类,只能用来被子类调用。
5. 抽象类只能用来继承。
6. 抽象方法必须被子类实现。抽象类的子类必须覆盖所有的抽象方法才能被实例化,否则还是抽象类
接口
定义:
- 接口中可以包含属性–>静态常量
- 接口中可以包含方法–>抽象方法
- 接口中可以包含非抽象方法–>default关键字,static关键字(JDK1.8)
- 接口与接口的关系–》继承 -->java中的接口是多继承的
- 类与接口的关系–>实现 implements
- 即有继承,又有实现,谁在前谁在后?extends在前,implements在后
- 如果父类与接口中有同名方法,不是完全相同的方法,要求父类与接口中的方法,在类中必须构成重载