面向对象_多态
多态的概念:事物在不同环境下表现出来的不同形态
前提:1.要有继承或者实现关系
2.要有方法的重写
3.要有父类的引用指向子类的对象
多态的两个具体的知识点:
1.子父类中同名变量调用时,是如何运行的
2.子父类中重写方法调用时,是如何运行的
注意事项:在多态关系中:对象在调用同名变量是,编译的时候看父类是有有该变量,如果有,就不报错,如果没有,就报错,运行的也是父类中的变量
对象在调用重写方法是,编译的时候看父类是否有该变量如果有不报错,如果没有就报错,运行的是子类的方法
普通的继承和多态之间的关系
继承:子类有就用子类的,子类没有用父类的,父类也没有就报错
多态:
引用永远指向子类内存区中父类的那一小片内存 永远优先寻找父类中的成员;运行同名变量时,编译看父类 运行看父类
运行重写方法是,编译也是看父类,运行时因为重写的机制导致运行子类中的重写方法
抽象类:
怎么定义抽象类: 需要一个关键字:abstract
当我们吧一个方法定义成为抽象类以后,我们必须要将类定义成抽象类
抽象类的注意事项:
1.有抽象方法的类一定是抽象类,但是 抽象类中不一定有抽象方法
2.抽象类中是否有构造方法??有
3.有构造方法能不能创建对象?答案是不能 主要是给子类对象初始化用的
4.抽象类中的抽象方法 子类必须要重写吗?要重写,而且是有几个重写几个
5.abstract和final 能否共存??不能因为final修饰的类不能被继承,修饰的方法不能被重写,但是abstract 修饰的类需要继承,修饰的方法需要重写
6.既然抽象类不能创建对象,那我就想用抽象类的对象怎么办?
可以使用抽象类多态的形式定义对象,然后调用变量或者方法
接口
定义:功能的扩展 原先不具备的功能 经过后天的学习 学会的 定义为接口
如何定义一个接口:
interface 近似于class
interface 接口名{
方法;
}
注意事项:
1.接口名所有的方法都是抽象方法,即使你没写abstract 系统也会默认的给你加上abstract
2.接口是没有构造方法的,不能创建对象:可以使用接口多态的形式 进行接口调用接口中的值
3.接口可以有变量但是所有的变量都是常量 前面默认加上了static和final
4.接口怎么使用/???实现:implements
class 类名 implements接口名{
}
5.实现接口以后 需要实现接口所有的抽象方法 要么类本身是一个抽象 类
6.类和接口之间是一个多实现的关系
7.接口和接口之间是继承关系