特点:
1.利于代码复用
2.缩短开发周期
-
一种类与类之间的关系
-
使用已存在的类的定义作为基础建立新类
-
新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类
继承的关系
满足“A is a B”的关系就可以形成继承关系
继承的实现
通过extends关键字实现
例:
编写父类
class Animal{ //公共的属性和方法 }
编写子类,继承父类
class Dog extends Animal{ //子类特有的属性和方法 } class Cat extends Animal{ ... }
子类可以直接访问父类的非私有成员
父类不可以访问子类的特有成员(公有的也不行)
方法重写
方法重写与方法重载的区别:
方法重载:
1.在同一个类中
2.方法名相同,参数列表不同(顺序、个数、类型)
3.方法返回值、访问修饰符任意
4.与方法的参数名无关
方法重写:
1.在有继承关系的子类中
2.如下
-
方法名
-
参数类型、顺序、个数
都要与父类继承的方法完全相同,方法返回值类型可以是父类的子类(即返回值类型与父类兼容)
3.访问修饰符允许改变,但访问范围需要大于等于父类的访问范围
4.与方法参数名无关
当子类重写父类方法后,子类对象调用的是重写后的方法
子类中可以定义与父类重名的属性,子类对象调用时会调用子类中的重名属性
访问修饰符
-
公有的:public :允许在任意位置访问
-
私有的:private:只允许在本类中进行访问
-
受保护的:protected:允许当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许
-
默认:允许在当前类、同包子类/非子类调用:跨包子类不允许
访问修饰符 | 本类 | 同包 | 子类 | 其他 |
---|---|---|---|---|
private | √ | |||
默认 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
super关键字的使用
super:父类对象的引用
父类的构造不允许被继承和重写
子类构造默认调用父类的无参构造方法
可以通过super()调用父类允许访问的其他构造方法(直接在super的括号里加参数即可)
通过super调用父类其他构造方法时,super()必须放在子类构造方法有效代码的第一行
总结:
-
代表父类引用
1.访问父类成员方法——super.print();
2.访问父类属性——super.name;
3.访问父类构造方法——super();
-
子类的构造过程中必须调用其父类的构造方法
-
如果子类的构造方法中没有显式标注,则系统默认调用父类的无参构造方法
-
如果子类的构造方法中既没有显式标注,且父类中没有无参构造方法,则编译出错
继承后的初始化顺序
1.父类静态成员
2.子类静态成员
3.父类对象构造
4.子类对象构造
访问修饰符不影响成员加载顺序,跟书写位置有关
this和super
都不能在静态方法中被调用
this调用本类的构造方法,super调用父类的构造方法
构造方法调用时都必须放在第一行
this和super不能共存
总结
this:当前类对象的引用
1.访问当前类的成员方法
2.访问当前类的成员属性
3.访问当前类的构造方法
4.不能在静态方法中使用
super:父类对象的引用
1.访问父类的成员方法
2.访问父类的成员属性
3.访问父类的构造方法
4.不能在静态方法中使用