1:抽象类与抽象方法的使用:
抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
没有抽象构造方法,也没有抽象静态方法
抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
2:抽象类与普通类的区别
抽象类和普通类有什么区别?
抽象类使用abstract关键字修饰。
抽象类不能实例化,但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例。
抽象类中可以有抽象方法 也可以么有抽象方法。
普通类能够实例化。
普通类中一定不能含有抽象方法。
------------------------------------------
抽象方法与普通方法的区别:
抽象方法没有方法体。
普通方法有方法体。
抽象类规则:
1 含有抽象方法的类是抽象类,抽象类不一定含有抽象方法。
2 如果一个类继承了抽象类,实现抽象类中的方法。 如果类不想实现抽象方法,这个类也是一个抽象类。
3 抽象类不能实例化
3:介绍多态
(1)什么是多态?
同一种事物,由于条件不同,产生的结果也不同;多态:同一个引用类型,使用不同的实例而执行不同操作
(2)向上转型 向下转型
向上转型: 将一个子类对象赋值给一个父类类型的变量。
父类类型 父类变量=new 子类类型()。
此时父类类型变量能调用的方法是:
此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法。
此时通过父类引用变量无法调用子类特有的方法。
父类类型变量,如果想调用子类中特有的方法,需要将父类类型的变量向下转型。在向下转型的时候注意子类的类型(使用instanceOf关键字判断)
向下转型:将一个指向子类对象的父类引用赋给一个子类的引用,即:父类类型转换为子类类型。需强制类型转换
<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;
在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常
(3)将父类当作方法的参数
使用父类作为方法的形参,是Java中实现和使用多态的主要方式
使用父类作为方法的返回值,也是Java中实现和使用多态的主要方式