面向对象-2
继承:
在多个类中,可能存在相同的状态和行为,如果不处理,就会出现很多相同搞得代码,不好维护
抽象:
通过继承,我们可以将这个类中的相同的成员放到父类之中,让子类来继承
在某些情况下,父类中的某些方法子类必须继承,这个时候需要使用到抽象的概念
覆盖:
子类如果觉得父类中的某些方法自己不太适用,此时可以修改父类中的方法
this关键字
this的三种作用:
- 区分成员变量和局部变量
- 代表当前对象
- 构造器之间的调用
构造器和setter的区别
构造器是创建的时候进行初始化把数值进行赋值,只能初始化一次
setter方法可以多次进行赋值操作而且是在同一个类上
继承
概念:
- 被继承的类称为父类
- 继承父类的类称为子类
- 父类存放共同的字段和方法
- 子类存放自己特有的字段和方法
注意:
Java只支持单继承,但是可以多重继承
Object类是Java语言的根类,任何类都是Object的子类
例:
class A{}
class B{}
class C extends A,B{}
一个类只能继承一个类,不能继承多个类
继承的语法
class a {}
class b extends a{}
class a {}
class b extends a{}
class a {}
class b extends a{}
class c extends b{}
方法覆盖
概念:
- 父类使用public和protected修饰的子类都可以继承
- 父类没有使用修饰符进行修饰的子类也可以继承
- 父类使用private修饰的子类不能继承
- 父类的构造器子类不能继承
注意:
- 方法覆盖时参数和方法名称必须相同
super关键字
super的三种作用:
- 区分成员变量和局部变量
- 代表当前对象
- 构造器之间的调用
this和super区别
this和super都是关键字
this:表示当前类的对象,set方法中或者构造器中使用比较多
super:表示父类对象,子类覆盖的方法在子类中要明确调用父类的方法
抽象方法
如果类中使用抽象方法必须要把类定义为抽象类或接口之中
抽象方法没有方法体
子类必须覆盖该方法(子类没有覆盖,该类必须也必须是抽象的)
定义:
//抽象方法
public abstract void method1();
抽象类
抽象类不能被直接实例,只能被继承
抽象类可以同时拥有抽象方法和普通方法
抽象方法一定要有抽象方法否则没有定义为抽象类没有意义
定义:
//抽象类
public abstract class AbstractDemo{}
抽象类的意义
必须要让子类覆盖的方法时这个时候就使用抽象类
Object
所有类的类的父类都是object
常用的object中的方法
方法名 | 含义 |
---|---|
toString | 打印全限定类名和hashCode()值 |
equal | 两个对象进行比较内存地址 |
方法的调用顺序(就近原则)
- 首先找子类的对象
- 若找不到,找父类的对象
- 如果父类对象找不到,报错