1、概述
面向对象的三大特性之一,是多态的前提
主要解决的问题是共性抽取,用于抽取类之间相同的部分
子类可以拥有父类的内容,也可以拥有自己的内容
2、继承的格式
父类就是普通的类
子类:
public class 子类的名称 extends 父类名称{
}
举例
父类:
//定义一个父类,人
public class Person {
public void say(){
System.out.println("说了一句话");
}
}
子类:
public class Teacher extends Person{
}
创建子类对象并使用继承下来的方法
public class ExtendsDemo {
public static void main(String[] args) {
Teacher teacher = new Teacher();
//Teacher类当中虽然什么都没有,但是会继承父类
teacher.say();
}
}
注意:子类也可以是父类
3、访问成员变量的特点
没重名的按正常的方法就好,子类和父类的成员变量重名了就需注意以下几点:
有两种访问方法:
1、直接通过子类对象访问成员变量
等号左边是谁,就优先用谁,没有则向上找
2、间接通过成员方法使用成员变量
通过间接的成员方法访问成员变量,该方法属于谁就优先用谁
三种重名同时出现
即局部变量,本类成员变量,父类成员变量同时重名,用一下方法区分
局部变量: 直接使用
本类成员变量:this.成员变量名
父类成员变量: super.成员变量名
4、成员方法的访问
没重名正常用即可
重名时,创建的对象是谁,就优先用谁,没有则向上找
注意:无论成员方法还是成员变量,如果没有,都是向上找父类,不会向下找子类
5、super关键字的三种用法
1、在子类的成员方法中访问父类的成员变量
public void method(){
System.out.println(super.num);
//调用父类中的num
}
2、在子类的成员方法中,访问父类的成员方法
super.mehod()
3、在子类的构造方法中,访问父类的构造方法
super()
6、方法的重写
重写概念(override):需要有继承关系,子类重写父类的方法!
重写都是方法的重写与属性无关
特点:创建的是子类对象,则优先用子类方法
注意:
1、方法名必须相同
2、参数列表列表必须相同
3、修饰符:范围可以扩大但不能缩小
public > protected > (default) > private
default是留空,什么都不写
4、抛出的异常:范围,可以被缩小,但不能扩大
ClassNotFoundException-->Exception(大)
重写,子类的方法和父类必要一致;方法体不同!
为什么需要重写:
1、父类的功能,子类不一定需要,或者不一定满足!
alt+insert:override;
7、构造方法的访问特点
父类和子类的构造方法都会执行,先执行父类再执行子类
注意:
1、子类构造方法中有一个默认隐含的super()调用
2、可以通过super关键字来使子类构造调用父类重载构造
3、super的父类构造调用,必须是子类构造方法的第一个语句
4、子类必须调用父类构造方法,不写则默认用父类无参构造
8、this关键字的三种用法
super用来访问父类内容,而this关键字用来访问本类内容
1、在本类的成员方法中,访问本类的成员变量
2、在本类的成员方法中,访问本类的另一个成员方法
3、在本类的构造方法中,访问本类的另一个构造方法
注意:第三种用法中this(...)必须是构造方法的第一个语句(唯一一个)
public Th(){
this(123);//本类的无参构造,调用本类的有参构造
}
public Th(int n){
}
9、java继承的三个特点
1、JAVA语言是单继承的(一个类的父类只有唯一一个)
2、JAVA语言可以多级继承,最初是java.lang.Object类
3、一个子类的直接父类是唯一的,但一个父类可以用多个子类