多态:
它指的是同一操作作用于不同的对象时,可以有不同的表现形式或行为。
- 方法重载(Overloading)(静态多态):同一个方法名,但参数不同。
- 方法重写(Overriding)(动态多态):子类重写父类的方法,使得子类对象可以有不同的行为。
多态的优势
- 灵活性:通过父类引用指向子类对象,可以实现统一的接口调用,让代码更具有扩展性和灵活性。
- 可维护性:多态允许我们在程序运行时根据需要改变行为,使得程序更加简洁、易于维护。
- 代码复用性:可以通过继承和方法重写来避免重复代码。
向上转型:
父类的引用指向子类的对象,父类的引用可调用子类重写父类的方法和父类的属性
向下转型基于向上转型
是将父类的引用转化为子类类型,目的是调用子类所有的属性和方法
对象不能强转
this.size
二义性:参数的名称和当前对象属性名称重复导致的
抽象类:
存在原因:可以作为多态参数或返回类型,或者建立一个多态数组
抽象类不可以被实例化,可以有静态成员,基本没有用处,除非有其他类扩展它
如果声明了一个抽象方法,那么这个类就是抽象类
抽象方法的意义在于:即使没有放入任何具体的方法代码,还是可以为一组子类型定义部分协议
抽象方法,抽象类可以很方便的实现多态,使用一个有抽象方法的超类,那么在其写子类时,就不必重写那些与超类不同的新方法,所有子类都可以扩展同一个抽象方法
接口中的方法全部都是抽象方法(public abstract 可加可不加)
public interface Dog{
void Scream();
public abstract String Clothes();
}
抽象类与抽象方法的使用
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
没有抽象构造方法,也没有抽象静态方法
抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
接口的使用:
接口中的成员变量默认都是 public static final ,必须显式初始化
接口中的方法默认都是 public abstract
接口没有构造方法,不能被实例化
一个接口不能实现另一个接口,但可以继承多个其他接口
一个类必须实现接口抽象方法( implements ),除非这个类也是抽象类
抽象类和接口:
相同点
代表系统的抽象层
都不能被实例化
都能包含抽象方法
用于描述系统提供的服务,不必提供具体实现
不同点
在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
抽象类便于复用,接口便于代码维护
一个类只能继承一个直接的父类,但可以实现多个接口
使用原则
接口做系统与外界交互的窗口
接口提供服务
接口本身一旦制定,就不允许随意修改
抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点
超类——Object
所有类的超类,如果没有显式的扩展一个类,所有这样的类都隐式的扩展了Object类
特点:
- 所有类的父类
- 提供了一些基本的方法
浙公网安备 33010602011771号