1.封装
利用一种机制来控制数据的可见性,这种机制-->访问修饰符
2.四个访问修饰符
public->protect->默认->private(从左到右可见性逐渐缩小)
public所修饰的数据在任何情况下都是可见的(本类、同一个包下的不同类之间、同一个包下的父子类之间、在不同包下的父子类或者无关类之间)
private所修饰的数据只在本类中是可见的
protect和默认所修饰的数据,在同一个包下和public是一样的;不同包下protected是有可能被访问到的,但是默认的是一定不能被访问到。
3.Javabean-->是一种封装数据的方法
要求:
(1)类必须是public的
(2)所有的属性必须是private的
(3)为每一个属性提供一组setter/getter方法用于访问(设置/取值)
//setter赋值方法
public void set首字母大写的属性名(参数){
this.属性名=参数
}
//getter取值方法
public String get首字母大写的属性名() {
return this.属性名;
}
(4)必须含有至少一个无参构造方法
问题:
1能不能设计出只读或者只写的属性
只读:
属性private
只为属性提供getter方法
只写:
属性private
只为属性提供setter方法
4.多态:就是一个事物在不同条件下所呈现出的不同状态
比如:水
0度以下:固态,0~100度:液态,100以上:气态
在程序中的多态是怎么表现的?
(1)从末微(从方法)观角度
方法在不同条件下呈现的不同状态
(a)方法的重载:扩展本类中同类型方法的功能
a1.在同一个类中
a2.方法名必须相同
a3.参数列表不能相同(参数的数量不同,参数类型不同,不同数据类型的顺序不同,相同类型但是顺序不同不叫参数列表不同)
a4.返回类型没有限制
a5.访问修饰符没有限制
a6.和异常的关系
(b)方法的重写:子类方法覆盖父类的方法的功能
b1.发生在父子类之间
b2.方法名相同
b3.参数列表相同
b4.访问修饰符子类方法的访问不能小于父类方法的
b5.返回类型相同
b6.和异常的关系...
构造方法可以重载,构造方法不可以重写,构造方法和类名相同
Object类中有重载的方法,wait()方法;
Object类中有重写的方法,equals()和tostring()、hasCode()
(2)从宏观(从对象)角度
对象在不同条件下呈现的不同状态
对象多态的前提:
①必须在父子类之间、
②必须有方法的重写
③必须有父类引用指向子类对象
A是B的父类
B b=new B();一般实例化
A a=new B();父类的引用指向子类对象
为什么要使用多态?
简化代码结构,提高代码的可维护性
5.理解多态:
1.实例化对象的时候,父类引用=之类对象
2.方法的参数
定义:public void 方法名(父类引用)
调用:方法名(之类对象)
3.方法的返回值
public 父类 方法名(参数列表){
return 之类对象
}
6.final终态
①修饰类:终态类-->不能被继承
②修饰成员变量:终态变量-->当变量赋值完一次以后就不能被修改
③修饰方法:终态方法-->不能被重写
④修饰方法的参数:终态参数-->参数只能取值不能被赋值
⑤修饰对象的引用:终态的引用-->引用指向的地址不能改变
7.static静态
①修饰成员变量:修饰成员变量的特性由隶属对象的变量变成隶属于类的变量(如果:变量final static的那么说明该变量既不能重新赋值又是属于类的属性,这一属性称之为常量)
所以该变量的调用方式不在需要用对象调用类名静态属性名
②修饰方法:修饰方法的特性由隶属对象的方法变成隶属类的方法
所以该方法的调用方式不在需要用对象调用;类名.静态方法名
③修饰块
static{
}是在构造方法前运行的,所以静态块中可以放一些资源的初始化操作(例如:JDBC驱动的加载)
注意:静态资源和非静态资源在JVM的加载时机问题
静态资源只能调用静态资源,非静态调用即可以调用静态资源也可以调用非静态资源
Why?
静态资源的加载比非静态资源要更早!程序内容的不是按从上往下的顺序初始化
- abstract、interface:是一种思想,对编程的一种,对程序脉络把控思路重要体现
8.abstract抽象
- 修饰类:抽象类
- 修饰方法:抽象方法(没有方法体的方法)
抽象类中可以有普通方法也可以有抽象方法;抽象方法必须在抽象类中;抽象类不能被实例化;抽象类中的抽象方法是需要子类重写,非抽象的方法可以使用之类继承或者修改成static的来调用;如果子类不能完全重写父类中所有的抽象方法,那么子类也应该是抽象的;抽象类中定义成员变量没有限制,要使用该成员变量的时候方法可以使用之类继承或者修改成static的来调用;抽象类只能单继承
9.interface接口(抽象的抽象类)
接口中的方法必须是抽象方法,而且默认的方法就是public abstract的;接口中的成员变量默认就是public static final;接口不能实例化;接口中的所有都需要之类重写,如果实现类不想重写接口中所有的抽象方法,那么该实现类也应该是抽象的;接口是可以多实现的.
问题:
- 抽象类能否继承抽象类?可以
- 接口能否继承接口?可以
- 接口能否实现接口?不可以
- 接口能否继承抽象类?不可以
- 抽象类能否实现接口?可以