面向对象的核心:
抽象/继承/封装/多态
1.抽象:在完成某功能的过程中通过分析抽离出该功能需要的各种数据(属性、方法.....)
2.继承:子承父业
好处:
子类可以直接使用父类的资源 站在巨人的肩膀上起步可以更高
类比到开发编码中:
优势:
(1)提高代码的重用性
(2)提高代码的扩展性
继承的语法: 子类 extends 父类
问题:
(1)一个子类能不能同时继承多个父类?
JAVA中的继承是单继承
(2)继承能不能传递?
A extends B
B extends C
A是否可以使用C和B中的资源?
可以 所有的类都基层自一个顶层类Object
3. 封装:利用一种机制来控制数据的可见性,这种机制-->访问修饰符
四个访问修饰符:
public->protect->默认->private(从左往右可见性逐渐缩小)
public所修饰的数据在任何情况下都是可见的(本类、同一个包下的不同类之间、同一个包下的父子类之间、在不同包下的父子类或者无关类之间)
private所修饰的数据只在本类中是可见的
protect和默认所修饰的数据,在同一个包下和public是一样的;不同包下protected是有可能被访问到的,但是默认的是一定不能访问的。
javabean-->是一种封装数据的方法
要求:
(1)类必须是public的
(2)所有的属性必须是private的
(3)为每一个属性提供一组setter/getter方法用于访问(设置/取值)
//setter赋值方法
public void set首字母大写的属性名(参数) {
this.属性名 =参数;
}
//getter取值方法
public String get首字母大写的属性名() {
return this.属性名;
}
(4)必须含有至少一个无参构造方法
问题:
能不能设计出只读或者只写的属性?
只读:
属性private
只为属性提供getter方法
只写:
属性private
只为属性提供setter方法
4.多态:一个事物在不同条件下所呈现出的不同状态
例子:水
0度以下:固态
0~100度:液态
100以上:气态
在程序中的多态是怎么表现的?
(1)从未微(从方法)观角度 方法在不同条件下呈现的不同状态:
a:方法的重载:扩展本类中同类型方法的功能
<1>在同一个类中
<2>方法名必须相同
<3>参数列表不能相同(参数的数量不同,参数类型不同,不同数据类型的顺序不同,相同类型但是顺序不同不叫参数列表不同)
<4>返回类型没有限制
<5>访问修饰符没有限制
<6>和异常的关系...
问题:
(1)构造方法是否能重载?可以
(2)Object类中是否有重载的方法?有,wait()方法
b:方法的重写:子类方法覆盖父类方法的功能
(1)父子类之间
(2)方法名相同
(3)参数列表相同
(4)返回类型相同
(5)访问修饰符子类方法的访问的不能小于父类方法的
(6)和异常的关系.....
问题:
<1>构造方法是否能重写?不行
<2>Object类中是否会被有重写的方法?有,Object中的equals()和toString()、hasCode()
(2)从宏观(从对象)角度 对象在不同条件下呈现的不同状态 对象多态的前提:
<1>必须在父子类之间
<2>必须有方法重写
<3>必须有父类引用指向子类对象
A是 B的父类
B b = new B();一般实例化
A a = new B();父类引用指向子类对象
问题:为什么要使用多态? ———简化代码结构,提高代码的可维护性
a:理解多态: 实例化对象的时候 父类引用 = 子类对象
b:方法的参数:
定义:public void 方法名(父类引用)
调用:方法名(之类对象)
c:方法的返回值
public 父类 方法名(参数列表){
return 之类对象
}