继承
目的
提高代码的重用性,减少一些重复代码的书写
权限修饰符
就是是用来限制类中的成员(成员变量、成员方法、构造器)能够被访问的范围。
private 只能本类
缺省 本类、同一个包中的类
protected 本类,同一个包中的类、子孙类中
public 任意位置
特点
单继承:Java是单继承模式:一个类只能继承一个直接父类
多层继承:Java不支持多继承,但支持多层继承
祖宗类:Java中所有的类都是object类的子类
就近原则:优先访问自己类中,自己类中的没有才会访问父类,当子类要访问相同的父类的内容则需要用super关键字
方法重写
当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。
注意事项
- @Override增加注解
- 子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限(public > protected >缺省)
- 重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。
- 私有方法、静态方法不能被重写,如果重写会报错的。
常见场景
子类重写Object类的toString()方法,以便返回对象的内容。
子类构造器的特点
子类的全部构造器,都会先调用父类的构造器,再执行自己。
简单举个例子
首先创建一个People类,定义姓名,性别,还有有参,无参构造器,以及getter和setter方法
package com.test.exten;
public class People {
private String name;
private char sex;
public People(String name, char sex) {
this.name = name;
this.sex = sex;
}
public People() {
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", sex=" + sex +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
创建一个People类,定义技能,有参和无参构造器。
package com.test.exten;
public class Teacher extends People {
private String skill;
// public Teacher(String name, char sex, String skill) {
// super(name, sex);
// this.skill = skill;
// }
public Teacher(String skill) {
this.skill = skill;
}
public String getSkill() {
return skill;
}
public Teacher() {
}
public void setSkill(String skill) {
this.skill = skill;
}
}
创建测试类Test
package com.test.exten;
public class Test {
public static void main(String[] args) {
Teacher t = new Teacher();
t.setSkill("唱歌");
t.setName("bob");
t.setSex('男');
System.out.println(t.getSkill());
System.out.println(t.getSex());
System.out.println(t.getName());
}
}
结果
但是这样创建就会报错
在People中创建有参构造器如下就可以实现这个需求
public Teacher(String name,String skill,char sex) {
super(name, sex);
this.skill = skill;
}
THIS调用兄弟构造器
作用:在构造器中调用本类的其他构造器。
super(...)this(...)必须写在构造器的第一行,而且两者不能同时出现。
多态
概念
多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。
对象多态:人这个对象可能是学生、老师等
行为多态:老师教书,歌手唱歌等
案例:动物有狼和乌龟(对象多态),但是狼跑的快、乌龟跑的慢(行为多态)
前提
有继承/实现关系;存在父类引用子类对象;存在方法重写。
作用
在多态形式下,右边对象是解耦合的,更便于扩展和维护。
定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。
多态下不能调用子类独有功能
多态下的类型转换问题
注意
需要idea开启注解功能