多态在成员方法中:
在编译期,参考p变量所属的类中是否有调用的方法,如果有编译通过,没有编译失败
在运行期,参考p变量指向的对象,所属的类中是否有调用的方法
动态绑定 :
当父类引用指向子类对象时,在运行期虚拟机会根据对象所属的类型 来决定调用哪个方法。
抽象类
抽象方法 : 只有方法的声明,没有方法体
1.有抽象方法的类 只能定义为抽象类 (抽象类中只能定义抽象方法吗?错误)
2.抽象类和抽象方法 必须用abstract关键字修饰
3.抽象类 不可以用new来创建对象,因为调用抽象方法毫无意义
抽象类有构造方法,但是只能被子类调用
4.抽象类的作用:希望被继承,对于父类没有实现意义的方法必须让子类重写
5.如果一个类继承了抽象父类,但是没有重写父类的所有抽象方法,该类还是个抽象类。
6.抽象方法不能用static来修饰,静态方法不能被重写的。
------------------------------------------------------
接口
当抽象类中的方法全都是抽象方法的情况下,该类可以通过接口的形式来定义。
interface定义接口
1.接口中只包含常量和抽象方法。
2.接口中没有构造方法,不能用new来创建对象。
3.类与类之间是单继承, 接口与接口之间是多继承
类通过implements实现接口 : 类与接口之间是实现关系
1.一个类可以实现多个接口
2.一个类可以在继承一个父类的同时,实现多个接口 --继承在前实现在后
class Dog extends Animal implements CrossFire,Jump
一个类是抽象类的情况:
1.包含抽象方法
2.一个类继承抽象父类,但是没有重写父类的所有抽象方法
3.一个类实现接口,但是没有实现接口中的所有抽象方法
接口和抽象类的异同:
相同点:
都包含抽象方法
都不能用new来创建对象
不同点:
接口中没有构造方法,抽象类可以包含构造方法
接口中只有常量,抽象类中还可以有属性和静态变量
接口中只有抽象方法,抽象类还可以有非抽象方法
接口与接口之间是多继承 类与类之间是单继承
------------------------------------------------------
final 最终的 可以修饰变量,方法 ,类
final修饰的变量 :只能初始化一次,以后不能再改变
有三种:
静态变量
可以在定义静态变量时 或者 静态代码块中进行初始化
成员变量
可以在定义成员变量时 或者 代码块中 或者构造方法中进行初始化
局部变量
只有栈中的值不可以修改
final修饰类:该类不能被继承
final修饰方法:该方法不能被重写
------------------------------------------------------
设计模式
单例模式
解决一个类的内存中只存在一个对象
不论何时 不论何地 获取某个类的对象 获取到的是同一个对象
思路:
1.避免外部随便new对象,当前类构造方法不能公开,禁止外部类创建对象。
2.构造方法不公开,只能在当前类中建立对象。
3.为了让外部能够访问该类对象,提供对外访问方法。
实现单例:
1.构造方法私有化
2.提供静态私有的成员变量:用来保存该类唯一对象
3.提供公开的静态方法:供外部访问唯一对象