继承:
定义一个类时,发现已有类和要定义的类相似 ,并且 要定义的类 属于 已有类一种可以将要定义的类定义为已有类的子类。
方法重写:
继承后,子类可以使用父类所有非私有的属性和功能,但是如果子类觉得父类的方法不够强大 按照自身的逻辑
重新定义此方法 这个过程叫做方法重写、方法复写、方法覆盖
方法重写的注意事项
1.可以使用@Override来检验是否为方法重写
2.方法重写 子类方法的访问权限要大于等于父类方法的访问权限(public、default、private、protect)
3.推荐子类重写方法的声明和父类方法完全一致
4.当方法重写时,如果返回值类型是基本类型 子父类方法的返回值类型必须一致
如果返回值类型是引用类型 子类方法的返回值类型可以是父类方法返回值类型的子类
注意:
父类对象优先于子类对象产生
在子类的每一个构造方法的第一行 都有默认的一个super()调用父类的空参构造方法
super(参数)可以调用父类的指定参数的构造方法、在对父类进行赋值时可用。
this(参数)可以调用本类其他的构造方法 但是也必须写在构造方法的第一行
**this()和super()都需要写在构造方法的第一行 所以不能共存在
变量的访问原则
就近访问
1、子类局部> 子类成员 >父类成员
2、this.属性名 访问本类的成员变量
3、super.属性名 访问父类的非私有的成员变量
4、this.方法名(参数) 访问本类的成员方法
5、super.方法名(参数) 访问父类的非私有的成员方法
抽象方法:
只有方法声明 没有方法体的方法 可以定义为抽象方法
eg:public abstract void XXX();
抽象类:
有抽象方法的类必须定义为抽象类
注意:
abstract 只能修饰 方法和类
抽象类的使用
1.抽象类不能创建对象
2.定义子类继承抽象类
3.重写抽象方法(实现方法)
4.创建子类对象 调用方法
抽象类的特点(JDK1.7前)
1.抽象类一定是一个父类
2.抽象类中可以有具体的方法 供子类使用
3.抽象类可以没有抽象方法
4.抽象类可以有多个抽象方法 子类必须全部实现这些抽象方法 子类才可以创建对象, 如果不实现 子类也得是一个抽象类
5.抽象类有构造方法 为了子类使用
抽象类出现的意义
1.抽象类定义类共性内容 供子类使用 提供了代码的复用性
2.抽象类强制子类实现了方法