今日内容
super和this的含义
- super:代表父类的存储空间标识(可以理解为父类的引用)
- this:代表当前对象的引用(谁调用就是代表谁)
super和this的用法
super
-
访问父类的成员
super.成员变量; super.成员方法();
-
访问父类的构造方法
super(...) 父类的构造方法
- 继承关系中,父类的构造方法的访问特点:
- 子类构造方法当中有一个默认的隐式的super()调用,所以一定是先调用父类的构造,后执行的子类构造
- 子类构造可以通过super关键字来调用父类的重载构造
- super的父类构造调用,必须是子类构造方法中的第一个语句。不能一个子类构造调用多次super构造。
总结:
子类必须调用父类的构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。
this
-
访问当前类的成员
this.成员变量; this.成员方法;
-
访问当前类的构造方法
this(...) 当前类的构造方法
this()构造方法在调用时不能形成闭合。
this(…)调用时也必须是构造方法的第一个语句,唯一一个。
super(…)和this(…)两种构造方法调用时,不能同时使用。
-
- 继承关系中,父类的构造方法的访问特点:
-
继承的特点
-
java语言只支持单继承,不支持多继承
-
Java语言只支持多级继承(继承体系)
-
顶层父类是Object类,所有的类默认都继承Object类
-
子类和父类是一种相对概念。
抽象类
##### 概述
父类当中的方法,被他的子类们重写,子类的各自实现又不一样。那么父类的方法声明和方法体,只有声明还有意义,而方法体内容则没有存在的意义。我们把这种没有方法体内容的方法称为抽象方法。Java语言规定,如果一个类包含了抽象的方法。那么该类就是一个抽象类
定义:
抽象方法:没有方法体的方法
抽象类:包含抽象方法的类
abstract关键字的使用格式
###### 抽象方法
使用abstract关键字修饰成员方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。
###### 定义格式:
修饰符 abstract 返回值类型 方法名(参数列表);
示例代码:
public abstract void run();
// 吃饭的抽象方法
public abstract void eat();
// 动物跳跃的抽象方法
public abstract void jump();
抽象类
如果一个类包含了抽象方法,那么该类就是一个抽象类。
定义格式:
修饰符 abstract class ClassName {
}
示例代码:
public abstract class Animal {
// 奔跑的抽象方法
public abstract void run();
}
抽象的使用
继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为一个抽象类。
注意事项
关于抽象类的使用,需要注意的事项:
- 抽象类不能创建对象,如果创建对象,编译无法通过。只能创建其非抽象子类的对象
- 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
- 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- 抽象类的子类,必须重写父类中的所有的抽象方法,否则编译无法通过,除非该子类也是抽象类。
学习目标
- 写出定义接口的格式
- 写出实现接口的格式
- 说出接口中的成员的特点
- 能够说出使用多态的前提条件
- 理解多态的向上转型
- 理解多态的乡下转型
- 能够使用多态和接口完成相应的案例开发。
接口
##### 概述
接口,是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是【封装了方法
】,包含了抽象方法(JDK1.7及以前),默认方法和静态的方法(JDK1.8),私有方法(JDK1.9)
接口的定义,它与类的定义很相似,但是使用interface关键字,他也会被编译生成class文件,但一定要明确他并不是类,而是另外一种引用数据类型。
引用数据类型:类、数组、接口。
接口的使用,不能直接创建对象,但是可以被实现(implements关键字,类似于被继承),一个实现接口的类(可以看做是接口的子类),需要重写接口中的所有的抽象方法,创建该类对象,就可以调用方法了。
接口的定义格式:
public interface 接口名称{
// 抽象方法 为主
// 默认方法
// 常量
// 静态方法
// 私有方法(JDK1.9)
}
含有抽象方法
抽象方法:使用abstract关键字修饰,没有方法体内容,该方法主要是供子类使用的
public interface InterfaceName {
public abstract void method();
// public abstract 可以省略不写
}
含有默认方法和静态方法
默认方法:使用default
关键字修饰的方法,不可省略,供子类调用或者子类重写。
静态方法:使用static
关键字修饰的方法,供接口直接调用。
含有私有方法和私有静态的方法
私有方法:使用private