面向对象(2)
一、继承(java面向对象的三大特征之一):
含义:子类继承父类,可以直接使用父类的属性和方法(主要使用方法)
关系:类与类之间的关系
父类:有时候也会叫做 超类、基类。
关键字:extents
一般在什么时候使用:
一般一个小的类和大的类之间这样使用
好处:
减少的代码的冗余,提高了代码的复用性
特点:
1.子类可以继承父类非private的属性和方法
2.子类可以拥有自己特有的属性和方法,既子类可以对父类进行扩展
3.java类的继承是单继承,但是可以多重继承
4.子类可以 重写 父类的方法
优点:
1.提高代码的复用性
子类中重复的代码只需要在父类中写一遍,所有子类都可以应用
2.提高代码的可维护性
只需要修改父类属性和方法,所有的子类都会应用
3.提高类与类之间的关联性,为多态做基础
其实这也是继承的缺点,增加了类和类之间的耦合度,耦合度的增加意味着后期扩展性的降低
关键字:this与super
1.子类的构造方法(无参与有参)里面,第一句默认添加super(),如果要手动添加,也必须放在第一位
补充:构造方法(※):
1.当一个类 没有构造 方法的时候,系统会默认给该类添加一个无参构造方法
2.当一个类 构造 了有参构造方法时,系统不会默认给该类添加无参构造方法
this与super的区别:
1.this代表本类对象的引用
this理解一个代词,就是创建对象的对象本身,new的那个对象)
“我”吃桃子(谁吃桃子,这个“我”是谁)
super代表父类对象
2.属性和方法都是对象调用的,那么this和super都可以调用方法
补充: 同一个类里面 静态 > 代码块 > 构造方法
子父类里面:父类静态>子类静态>父类代码块>父类构造方法> 子类代码块>子类造方法
类创建要比对象早,static是属于类的,不属于对象
在静态的里面不要调用非静态的,也不要用this与super
二、包(包名全部小写):
概念:为了更好地组织类,
作用:
一、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用
二、如同文件夹一样,包也采用了树形目录的存储方式。
同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,
当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。
因此,包可以避免名字冲突。
三、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
关键字:
import:导入包,告诉下面的代码我要使用哪个包的哪个类
package:告诉我们当前的类属于哪个包
完整的类名:
全限定类名
包的使用:
1.为了方便管理
2.域名倒写
3.全部小写
4.import和package的意义
三、抽象类:
概念:被abstract修饰的类叫做抽象类(有抽象方法的类就是抽象类)
类是对象的抽象化,抽象是类的抽象化
(抽象:提取共同特征)
把一些类的共同特征抽取出来,放到一个类中,这个类就叫做抽象类
抽象方法:被abstract修饰的方法叫做抽象方法
抽象方法没有方法体
特点:
1.抽象类有构造方法,但不能创造对象,抽象类的构造方法就是给成员变量初始化的
2.抽象类可以有普通的抽象方法,也可以有静态成员变量
3.抽象类里可以有抽象方法,但是普通类里不能有抽象方法
4.抽象类也可以有普通的方法
5.普通类继承抽象类,必须重写抽象类中的抽象方法
注:抽象类天生就是当爹的
补充(※):
方法重写:
子父类关系中,子类和父类的方法名,参数列表,返回值必须相同
1.存在继承或者实现功能
2.方法名,参数列表,返回值必须相同
3.子类的访问权限必须大于等于父类的访问权限(一般情况下都是public)
4.子类抛出的异常等级必须小于等于父类抛出的异常
为什么要方法重写:
当父类不知道子类的方法到底怎么执行的时候,就需要把这个方法定义成抽象方法,让子类重写这个方法
子类继承了父类以后,子类就拥有了父类的方法,但是这个方法不适合子类,就需要子类重写这个方法