一. 继承
1.继承
创建多个同一种类的事物,其中会出现大量重复的代码,我们可以使用继承来解决这个问题.
2.格式和特点
public class 类A extends 类B{
//类A是子类
//类B是父类
}
继承的特点
- 子类可以(继承)使用父类所有非私有的属性和行为
子父类的特点
- 子类只能继承一个父类,Java是单继承
- 父类可以有多个子类
- 子类的父类还可以继承父类,Java可以多层继承
3.继承之后成员的访问特点
(1)子父类成员变量不同名
- 使用无影响
(2)子父类中成员变量同名
- 使用子类的成员变量
(3)子父类中成员方法不同名
- 使用无影响
(4)子父类中成员方法同名
方法的重载
- 同一类中,方法名相同,参数不同,与返回值类型,修饰符无关
方法的重写(override)
- 子父类中出现一模一样的方法(子类的权限≥父类的权限)
访问特点
- 使用的是子类中的成员方法
重写的使用场景
- 子类觉得父类的方法, 不够好, 子类就重写父类的方法.
使用子类对象调用属性或者行为:
子类有就用子类,没有就找父类,父类有就用父类,父类没有就报错
4. super和this
含义
- super:表示父类的引用
- this:表示本类对象. 谁调用我,我就代表谁
父类优先于子类存在.
父类与子类的执行顺序:
- 父类的静态成员变量和静态代码块
- 子类的静态成员变量和静态代码块
- 父类成员变量和初始代码块
- 父类构造方法
- 子类成员变量和初始代码块
- 子类构造方法
用法
- 普通使用
- this.属性: 每一个对象中的属性都是对象中自己的,谁调用这个方法,this就代表哪个对象
- this.方法():
- super.属性: 仅使用于子父类中属性同名
- super.方法(): 仅使用于子父类中方法同名
- 构造中的使用
- this(参数): 调用本类的构造方法
- super(参数): 调用父类的构造方法
- 每个构造方法的第一行都会默认生成 super() ,调用父类的空参构造
- this()和super()只能在构造方法的第一行,所以不能同时出现
- super() 应用
- 子父类继承的情况下,父类中有私有的属性和对应的构造方法,子类也需要有对应的构造方法,子类的构造方法需要给成员变量赋值
public class Fruit {
String name;
String color;
public Fruit() {
}
public Fruit(String name) {
this.name = name;
}
public Fruit(String name, String color) {
this.name = name;
this.color = color;
}
}
public class Apple extends Fruit{
public Apple() {
}
public Apple(String name, String color) {
super(name); //没有用this.name = name 而是使用super()调用父类的
this.color = color;
}
}
二.抽象
1.抽象类的概念
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
2.格式
//抽象类
public abstract class 类名{
}
//抽象方法
public abstract void 方法名();
创建一类事物的共性的类时,将这个类定义为抽象类,其中共性的方法定义为抽象方法.
3.抽象的特点
- 抽象类不能创建对象
- 不能创建对象,但是也具有构造方法,仅用于给子类初始化
- 抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类(接口)
- 子类必须重写父类的抽象方法.