多态
1.概述:
-
定义:指同一个方法或者同一个类,在不同的情况下具有不同的表现形式
-
注意:满足多态的前提是有继承或者实现关系
2.格式:父new子
父类类型 变量名 = new 子类/实现类构造器;
变量名.方法名();
// 多态前提,有继承关系,子类对象是可以赋值给父类类型的变量.
使用场景
- 父new子
- 父new接口
4.特点
- 调用成员变量时:编译看左边,运行看左边
- 调用成员方法时:编译看左边,运行看右边
5.内存图
6.多态优点:
- 在多态形式下,右边对象可以实现解耦合,便于扩展和维护
定义方法的时候,使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利。 7.多态缺点:无法直接访问子类特有的成员,也就是多态的写法无法访问子类独有功能,也就是说,父类不能调用子类的特有方法
8.引用类型转换:
-
含义:将一个对象的引用从一个类型转换为另一个类型
-
向上转型:将一个子类对象的引用转换为其超类或接口类型的引用
-
例如
父类类型 变量名 = new 子类类型(); Animal a = new Cat();
-
向下转型:将一个超类或接口类型的引用转换为一个子类对象的引用
-
例如
子类类型 变量名 = (子类类型) 父类变量名; Aniaml a = new Cat(); Cat c =(Cat) a;
9.instanceof关键字
- 含义:用于测试一个对象是否是一个类的实例,或者是该类的子类或接口的实例。简单来说就是类型校验
变量名 instanceof 数据类型 /* 如果变量属于该数据类型或者其子类类型,返回true。 如果变量不属于该数据类型或者其子类类型,返回false。*/
接口
1.概述
-
含义:接口是一种规范或契约,它只定义了方法签名、常量以及嵌套类型的声明,没有方法实现或属性
-
格式:
//接口的定义格式: interface 接口名称{ // 抽象方法 } // 接口的声明:interface // 接口名称:首字母大写,满足“驼峰模式”
- 特点:
抽象方法:会自动加上public abstract修饰 常量:会自动加上 public static final修饰
2.基本实现
-
实现方式:使用 implements关键字
-
格式:
/**接口的实现: 在Java中接口是被实现的,实现接口的类称为实现类。 实现类的格式:*/ class 类名 implements 接口1,接口2,接口3...{ }
- 要求:接口体现的是一种规范,接口对实现类是一种强制性的约束。需要强制重写或定义为抽象类
3.接口与接口的多继承
-
含义:一个接口可以继承另一个或多个接口,这被称为接口的多继承
-
格式:
public interface SportMan extends Law , Abc { void run(); }
- 补充:接口和类之间的关系
- 类和类是继承关系,只能单继承,不能多继承
- 类与接口是实现关系,可以单实现,还可以多实现
- 接口与接口是继承关系,可以单继承,还可以多继承