- 知识回顾
- 学习上章面向对象思想,算是迈进面向对象编程的一道必过门坎了
- 面向对象如此新奇的思想必有它特别的地方
- 新概念-类
- 什么是类
- 类是对现实生活中一类具有共同特征的事物的抽象
1) 可包含属性(特征)
2) 可包含方法(行为) - 类是面向对象程序中最基本的程序单元
- 实质上定义的是一种数据类型(对象类型)
- 类是对现实生活中一类具有共同特征的事物的抽象
- 类的作用
- 生活中:更好的描述客观事务,表达含义(把书放在桌子上[不论是什么书都要放在在桌子上])
- 程序中:创建需要的对象
- 如何使用类
- 定义语法
访问修饰符 class 类名{
可有属性的定义;
可有方法的定义;
} - 说明
1) 类中定义的属性称为成员属性
1. 定义语法:访问修饰符 数据类型 成员变量名 [= 初始值];
2) 类中定义的方法称为成员方法
1. 定义语法:访问修饰符 返回值类型 方法名(参数){}
3) 一个类根据需要定义成员属性或成员方法
4) 类中隐藏的构造方法(默认构造方法)
1. 内容
public 类名(){}
2. 说明
1. 构造方法的名字和类名相同,并且没有返回值
2. Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法
3. 构造方法是用来创建对象的
4. 如何重载构造方法
public 类名(){参数}
5. 如果需要重载构造方法,建议添加上默认的构造方法,因为如果需要调用默认时,程序就不会报找不到该构造方法了
- 定义语法
- 什么是类
- 新概念-对象
- 什么是对象
- 能具体感知的事物
- 软件的对象概念是由现实世界对象抽象而来
- 对象的作用
- 生活中:真实的描述客观存在的事务
- 程序中:存储数据或组织功能代码(不再是写函数了,而是找对象,用对象)
1) 属性:现实世界对象的状态保存在软件对象的变量中
2) 方法:现实世界对象的行为通过软件对象的方法(函数)来实现
1. [访问修饰符] [其它修饰符] 返回值类型 方法名([参数]){}
- 如何使用对象
- 创建语法
类型 对象名 = new 类型([参数]); - 说明
1) new关键字起到调用构造函数的作用,可根据需要传入参数
2) 对象是引用变量,同前面基本数据类型定义的变量不同这处是:它有属性与方法
3) 如何区分值变量与引用变量
1. 使用工具能.出提示的变量即引用变量
- 创建语法
- 什么是对象
- 类和对象的关系
- 类是对象的抽象,对象是类的实例(类是创建对象的模板,对象是类的实例)
- 其它常识
- 成员变量与局部变量的区别
- 定义位置不同:前者在类中后者在方法中
- 内存位置不同:前者在堆内存后者在栈内存
- 初始情况不同:前者默认会初始化后者不会
数值型默认值是0;boolean默认值是false;char是'\0'[一个字节的空白];对象是null - 如果成员变量与局部变量名称一致:采用就近原则
- 静态变量与成员变量的区别
- 所属不同:前者归类所属,也称为类变量;后者归对象所属,也称为实例变量
- 内存位置不同:前者在方法区的静态区,后者在在堆内存
- 出现时间不同:前者随与类同生同灭;后者与对象同灭
- 调用方式不同:前者可通过类调用也可通过对象调用;后者只能通过对象调用
- 程序入口方法理解
- 固定格式:public static void main(String args[]){}
- 说明
1) public:总能被JVM调用
2) static:能快速的被找到
3) void:不需要返回值
4) String args[]:可提供字符串参数(1.不要使用java HelloWorld.class;2.传入参数不要用,号使用空格)
- 方法的重载
- 在同一个类中,方法名相同,参数列表不同(参数个数,参数的类型)
- 与有无返回值及返回值的类型无关
- 方法的重写
- 发生在子类中
- 子类重写父类的方法:基本相同,目的是重写内容
1) 访问权限不能更低(最好相同)
- 传值与传引用
- 基本数据类型作参数时:传递的是实际的值(两分相同的数据)
- 引用数据类型作参数时:传递的是地址(同一份数据)
访问修饰符(决定类,类成员能否被访问)
修饰符关键字 同类中 同包中 子类中 其它包中 说明
public √ √ √ √ 完全访问,不受限制
protected √ √ √ × 继承的类可访问
default(缺省) √ √ × × 同一包中,可相互访问
private √ × × × 本类中才可访问- 其它修饰符
- static
- 它是什么
静态修饰符 它的作用
可修饰类成员
修饰的成员变量称为静态变量
修饰的成员方法称为静态方法
修饰的内容归类所属,不归方法所属
可直接通过类名引用,不必用实例化对象引用
静态的方法不能访问非静态的方法或属性,反之则可以
标记静态代码块
类加载时就被调用,先于main方法
只会执行一次,常用于程序的初始化工作- 如何使用
可修饰类成员,放在访问修饰符后类成员前:[访问修饰符] [其它修饰符] 类成员
修饰代码块,放置在大括号这前:static{}
- 它是什么
- final
- 它是什么
最终修饰符 - 它的作用
可修饰类
修饰的类不能被继承,即不会有子类
可修饰类成员
修饰成员变量:与public static + final来定义一个常量[通常是static final这种写法]
修饰成员方法:修饰的方法不能被重写 -
如何使用
修饰类:放置在class前即可修饰类成员
成员变量:放置在变量名前即可:成员方法:放置在返回值类型前即可
- 它是什么
- abstract
- 它是什么
- 抽象修饰符
- 它的作用
- 可修饰类
- 修饰的类称为抽象类:抽象类不能被实例化,其它特征与类相同
- 可修饰方法
- 修饰的方法称为抽象方法:只有方法声明而没有方法体
- 抽象方法没有方法体,必须被子类重写后才能使用
- 可修饰类
- 如何使用
- 修饰类:放置在class前即可
- 修饰方法:放置在返回值类型前即可
- 拥有抽象方法的类必定是抽象类,反之则不然
- abstract与final作用是相反的,故它们不能同时用于修饰类或成员方法
- abstract不能与static同用(static修饰的内容归类所属)
- abstract不能与private同用(pricate修饰的内容,子类无法继承,不能重写)
- 修饰类:放置在class前即可
- 它是什么
- static
- 总结访问修饰符与其它修饰符
- 前后顺序没要求,但是通常是下面几种写法
public static final 数据类型 成员变量名
public static final 返回值类型 方法名(){}
public static 返回值类型 方法名(){}
public 返回值类型 方法名(){}
public abstract 类名{}
public abstract 返回值类型 方法名(); - 构造方法不能被继承,不能被static,final,abstract修饰
可以使用访问修饰符修饰(单例模式就使用了此招)
- 前后顺序没要求,但是通常是下面几种写法
- 代码块
- 它是什么
使用{}括起来的代码即为代码块
分类
局部代码块:在方法中定义
构造代码块:在类中,方法外定义
静态代码块:在类中,方法外且加上static定义 - 它的作用
局部代码块:限定变量生命周期,极早释放,提高内存使用效率
构造代码块:先用构造方法前调用:可把相同的代码放于此,方便多个构造方法共享(无论你是有参还是无参)
静态代码块:给类初始化,只执行一次 - 如何使用
根据它的作用,选择适当的代码块,定义好了即使用好了
执行顺序:静态代码块>构造代码块>构造函数
- 它是什么
- 成员变量与局部变量的区别
- 封装特征
- 什么是封装
- 对外隐藏细节,但提供外部使用的接口
- 封装的好处
- 安全(能控制外部的恶意数据)
- 如何使用封装
- 把类中成员属性私有化(使用private访问修饰符)
- 提供公开的(public访问修饰符)set属性名()及get属性名()方法(获取数据,改变数据的方法)
1)
- 说明
- 如果属性较多时,可使用快捷键:alt+shift+s
1) - 当然,属性名同变量名,要遵守命名规则(我上面取名不符合规范)
- this知识点
1) 它是什么:它表示当前对象的引用(由实际对象决定它具体的值)
2) 它的作用
1. 所在类的对象引用(对象本身)
1. 每当调用一个实例方法时,this变量将被设置成引用该实例方法的特定的类对象。方法的代码接着会与this所代表的对象的特定数据建立关联。
2. 可以明确区分访问的是成员变量还是局部变量(即使它们名称相同):this.a = a;
1. 当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用this区分成员变量和局部变量。
3) 如何用它
1. 当成对象用即可
2. 不能用在静态的内容中
- 如果属性较多时,可使用快捷键:alt+shift+s
- 什么是封装
- 继承特征
- 什么是继承
- 从已有的类中派生出新的类(原类叫父类(超类,基类),新类叫子类
- 新的类能够吸收已有类的数据属性和行为
- 继承的作用
- 提高代码的重用(减少冗余)
- 子类可以扩展新的能力(多态的基础)
- 如何使用继承
-
使用语法
2) 创建子类,使用创建类的语法,在类名后添加extends 父类名称
1) 创建父类,使用创建类的语法即可
1.
2. -
说明
1) 一个父类可以有任意个子类
2) Object要么是一个类的父类,要么是一个类的祖宗:因为定义一个类时:默认有extends Object
3) java只支持单继承:没有extends A,B这种情况;但是有A>B>C,即支持多层继承
4) 子类构造方法(不管有参,无参)默认会调用父类无参构造方法
1.
5) 子类构造方法如果想调用父类有参构造方法,可用super(参数)来指定
1.
6) 子类不能继承父类的内容
1. 构造方法
2. 私有成员
7) 只有有is->a的关系就可以使用继承来设计程序中的类
8) super与this的异同
1. 异
1. 前者代表父类对象,用于访问父类成员,调用父类的构造方法
2. 后者代表所在类对象的引用,用于访问本类的成员,调用本类的其它构造方法
2. 同
1. 在构造函数中调用构造方法
1. this([参数]):
2. super([参数])
3. 有参数调用的是有参构造函数
4. 无论是this([参数]),还是this([参数]),只能放在第一句中2. 在代码块中访问类成员 1. this.成员变量 2. this.成员方法 3. super.成员变量 4. super.成员方法 3.
-
- 继承的扩展
- 抽象类(上面已经学习):父类抽象点就是抽象类(如果有抽象方法,要求子类必须重写)
- 接口:再抽象点就是接口
1) 定义语法
[public] [abstract] interface 接口名称{
[public] [static] [final] 数据类型 变量名;
[public] [abstract]返回值类型 方法名();
}
2) 特点
1. 接口的修饰符,默认是public abstract,写或不写,看你了
1.
2. 接口没有构造方法
3. 要求成员变量是常量,方法是抽象方法
1. 成员变量默认修饰符是:public static final,写或写多少,看你了
2. 成员方法默认修饰符是:public staract,写或不写,看你了
4. 类实现接口的语法(常用普通类,少用抽象类)
class 类名 inplements 接口名1[,接口名2]{}
表现的是have->a的关系 - 类与类的关系
1) 继承关系,只能单继承,可以多层继承 - 类与接口
1) 实现关系,可以单实现,也可多实现
2) 可以在继承一个类的同时,实现多个接口 - 接口与接口
1) 继承关系,可以多继承,也可多层继承
1.
- 什么是继承
- 多态特征
- 什么是多态
- 生活上:事务的多种形态
- 程序中:同一个引用类型,根据不同的实例而执行不同操作
1)
- 多态的作用
- 让程序更加灵活多样
- 减少代码冗余
- 如何使用多态
- 使用多态前提条件
1) 要有继承关系
2) 要有方法重写
3) 要有父类引用指向子类对象 - 定义方法参数的类型
- 定义方法返回值的类型
1) - 多态中成员访问的特点
Pet pet1 = new Dog();Pet pet2 = new Cat();
1) 对于成员变量和静态函数,编译和运行都看左边:访问的是父类的成员变量或静态函数
2) 对于成员函数,编译看左边,运行看右边:访问的是重写后的函数
1.
3) 父类类型不能访问子类特有的函数或成员变量,如果要访问需要强制类型转换
1.
- 使用多态前提条件
- 什么是多态