个人笔记,仅供参考
1、概述
面向对象的三大特性之一,是多态的前提
主要解决的问题是共性抽取,用于抽取类之间相同的部分
子类可以拥有父类的内容,也可以拥有自己的内容
2、继承的格式
父类就是普通的类
子类:
public class 子类的名称 extends 父类名称{
}
举例
父类:
//定义一个父类,员工
public class Employee {
public void method(){
System.out.println("方法执行");
}
}
子类:
public class Teacher extends Employee{
}
创建子类对象并使用继承下来的方法
public class ExtendsDemo {
public static void main(String[] args) {
Teacher teacher = new Teacher();
//Teacher类当中虽然什么都没有,但是会继承父类
teacher.method();
}
}
注意:子类也可以是父类
3、访问成员变量的特点
没重名的按正常的方法就好,子类和父类的成员变量重名了就需注意以下几点:
有两种访问方法:
1、直接通过子类对象访问成员变量
等号左边是谁,就优先用谁,没有则向上找
2、间接通过成员方法使用成员变量
通过间接的成员方法访问成员变量,该方法属于谁就优先用谁
三种重名同时出现
即局部变量,本类成员变量,父类成员变量同时重名,用一下方法区分
局部变量: 直接使用
本类成员变量:this.成员变量名
父类成员变量: super.成员变量名
4、成员方法的访问
没重名正常用即可
重名时,创建的对象是谁,就优先用谁,没有则向上找
注意:无论成员方法还是成员变量,如果没有,都是向上找父类,不会向下找子类
5、方法的重写
重写概念(override):在继承关系中,方法的名称一样,参数列表也一样,也叫方法的覆盖,
特点:创建的是子类对象,则优先用子类方法
注意:
1、必须保证父类子类之间的名称相同,参数列表也相同。可以在方法前写上@Override
用来判断是否是有效重写(报错就是无效重写)
2、子类方法的返回值必须小于等于父类方法的返回值(范围)
3、子类方法的权限,必须大于等于父类方法的权限修饰符
public > protected > (default) > private
default是留空,什么都不写
什么情况使用重写:
方法的功能增加时,为了不影响使用父类,这时会使用重写
6、构造方法的访问特点
父类和子类的构造方法都会执行,先执行父类再执行子类
注意:
1、子类构造方法中有一个默认隐含的super()
调用
2、可以通过super关键字来使子类构造调用父类重载构造
3、super的父类构造调用,必须是子类构造方法的第一个语句
4、子类必须调用父类构造方法,不写则默认用父类无参构造
7、super关键字的三种用法
1、在子类的成员方法中访问父类的成员变量
public void methodZi(){
System.out.println(super.num);
//调用父类中的num
}
2、在子类的成员方法中,访问父类的成员方法
super.mehod()
3、在子类的构造方法中,访问父类的构造方法
super()
8、this关键字的三种用法
super用来访问父类内容,而this关键字用来访问本类内容
1、在本类的成员方法中,访问本类的成员变量
2、在本类的成员方法中,访问本类的另一个成员方法
3、在本类的构造方法中,访问本类的另一个构造方法
注意:第三种用法中this(...)
必须是构造方法的第一个语句(唯一一个)
public Zi(){
this(123);//本类的无参构造,调用本类的有参构造
}
public Zi(int n){
}
9、java继承的三个特点
1、JAVA语言是单继承的(一个类的父类只有唯一一个)
2、JAVA语言可以多级继承,最顶级是java.lang.Object类
3、一个子类的直接父类是唯一的,但一个父类可以用多个子类