Java基础语法07-面向对象-多态-抽象类-多态应用-修饰符
-
-
抽象类:被abstract所修饰的类。
【权限修饰符】 abstract class 类名{
}
【权限修饰符】 abstract class 类名 extends 父类{
}
-
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
-
抽象类中,也有构造方法,是供子类创建对象时,初始化父类成员变量使用的。
理解:子类的构造方法中,有默认的super()或手动的super(实参列表),需要访问父类构造方法。
-
抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
-
抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
理解:假设不重写所有抽象方法,则子类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。
-
继承父类或者实现接口【二选一】
-
方法的重写【意义体现:不重写,无意义】
-
final方法 3)private方法 4)属性; //这些不能重写的就不可能有多态(即静态绑定)。只有能重写的方法才有多态(即动态绑定)。
-
-
父类引用指向子类对象【格式体现】
多态体现的格式:
父类类型 变量名 = 子类对象;
变量名.方法名();//这个方法是父类中声明,子类中重写的方法
父类类型:指子类对象继承的父类类型,或者实现的父接口类型。
多态体现出来的现象:
-
编译时,看“父类”,只能调用父类声明的方法,不能调用子类扩展的方法;
-
运行时,看“子类”,一定是执行子类重写的方法体;
多态的应用
1、多态参数
形参是父类的类型,传入的实参是子类的对象
元素的类型是父类的类型,存进去的元素对象是子类的对象
向上转型
-
向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。
向下转型
-
向下转型
变量名/对象 instanceof 数据类型
如果变量/对象属于该数据类型,返回true。
如果变量/对象不属于该数据类型,返回false。
-
-
成员变量
-
静态方法
-
私有方法
-
final方法
-
-
动态绑定:运行期间才确定访问哪个类的
-
可能被子类重写的非静态方法(也称为虚方法)
-
用法:
外部类 | 成员变量 | 代码块 | 构造器 | 方法 | 局部变量 | |
---|---|---|---|---|---|---|
public | √ | √ | × | √ | √ | × |
protected | × | √ | × | √ | √ | × |
private | × | √ | × | √ | √ | × |
static | × | √ | √ | × | √ | × |
final | √ | √ | × | × | √ | √ |
abstract | √ | × | × | × | √ | × |
native | × | × | × | × | √ |
不能和abstract一起使用的修饰符?
(1)abstract和final不能一起修饰方法和类
(2)abstract和static不能一起修饰方法
(3)abstract和native不能一起修饰
(4)abstract和private不能一起修饰方法
static和final一起使用:
(1)修饰方法:可以,因为都不能被重写
(2)修饰成员变量:可以,表示静态常量
(3)修饰局部变量:不可以,static不能修饰局部变量
(4)修饰代码块:不可以,final不能修饰代码块
(5)修饰内部类:可以一起修饰成员内部类,不能一起修饰局部内部类
类 java.lang.Object
是类层次结构的根类,即所有类的父类。每个类都使用 Object
作为超类。
-
Object类型的变量与除Object以外的任意引用数据类型的对象都多态引用
-
所有对象(包括数组)都实现这个类的方法。
-