一、继承
格式:
class 子类 extends 父类{ }
继承的好处:
1.继承的出现提高了代码的复用性,提高软件开发效率。
2.继承的出现让类与类之间产生了关系,提供了多态的前提。
当子父类中出现了同名成员变量时,在子类若要访问父类中的成员变量,必须使用关键字super来完成。
在子类中,访问父类中的成员变量格式:
super.父类中的成员变量
方法的重写Override
子类中出现了和父类一样的方法时(函数的返回值类型,函数名,参数列表),子类重写父类的方法。
image.png
image.png
image.png
=================================================
二、抽象类:
抽象方法的定义格式:
public abstract 返回值类型 方法名(参数);
抽象类定义格式:
abstract class 类名{
}
抽象类的特点:
1.抽象的方法必须存在与抽象的类中,类也必须用abstract修饰
2.抽象类不能实例化对象,不能new。
3.只有只有覆盖了抽象类中所有的抽象方法之后,其子类才可以创建对象。否则该子类还是一个抽象类。
不能创建对象的原因:抽象方法没有主体,不能运行。
重写父类的抽象方法;去掉abstract修饰符,加上方法主体。
image.png
================================================
三、接口
概念:
接口是功能的集合,同样可看做是一种数据类型。
接口只描述所应该具备的方法,并没有具体实现,是比抽象类更为抽象的’类”。具体的实现由接口的实现类湘当于接口的子类睐完成。这样将功能的定义与实现分离,优化了程序设计。
请记住:一切事物均有功能,即一切事物均有接口。
定义:使用interface关键字
格式:public interface 接口名{
抽象方法1;
抽象方法2;
抽象方法3;
}
*接口中的方法均为公共访问的抽象方法
*接口中无法定义普通的成员变量
实现接口:
class 类 implements 接口{
重写接口中的抽象方法
}
接口中成员的特点
1.成员变量的特点,没有变量 都是常量
固定定义格式:public static final 数据类型 变量名 = 值
public 权限
static 可以被类名直接.调用
final 最终,固定住变量的值
常量被静态修饰,可以被类名直接调用,被接口的名字直接调用。
public static final是修饰符,在接口的定义中可以省略不写。
2.接口中的成员方法特点:
public abstract 返回值类型 方法名(参数列表)
修饰符 public abstract 可以不写,选择性书写
3.实现类,实现接口,必须重写接口全部方法,才可以创建实现类对象。
实现类,重写了一部分抽象方法,还是一个抽象类
接口可以多继承
接口的好处:
1.接口的出现扩展了功能。
2.接口其实就是暴露出来的规则。
3.接口的出现降低了耦合性,即设备与设备直接实现了解耦。
接口和抽象类的相同点:
都位于继承的顶端,用于被其他类实现或继承;
都不能直接实例化对象;
都包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
抽象类为部分方法提供实现,避免子类实现这些方法,提高代码重用性;接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了java的单继承)
=================================================
四、多态
多态的概述:
最终多态体现为父类引用变量可以指向子类对象。
多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
多态的定义与使用格式:
格式:就是父类的引用变量指向子类对象
父类类型 变量名 = new 子类类型();
变量名.方法名();
多态调用公式:
父类类型或者是接口类型 变量 = new 子类对象();
多态中成员特点:
成员变量:
编译的时候,参考父类中有没有这个变量,有变量编译成功,没有变量编译失败。
运行的时候,运行的是父类中的变量值。
成员方法:
编译的时候,参考父类中有没有这个变量,有变量编译成功, 内衣变量编译失败。
运行的时候,运行的是子类的重写方法。
** 编译看父类,运行看子类**
多态-转型
向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。(将取值范围小的,自动提升为取值范围大的)
使用格式:
父类类型 变量名 = new 子类类型();
如Person p = new Student();
向下转型: 一个已经向上转型的子类对象可以使用强制类型的转化格式,将父类引用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的。
使用格式:子类类型 变量名 = (子类类型) 父类类型的变量;
如:Student stu = (Student)p;
instanceof关键字
判断某个对象是否属于某种数据类型
格式:boolean b = 对象 instanceof 数据类型;









网友评论