Java- 继承和多态
- 可以从现有的类派生出新类。这称为类的继承。新类称为次类、子类或派生类。现有的类称为超类、父类或基类。
- 构造方法用来构造类的实例。不同于属性和方法,子类不继承父类的构造方法。它们只能用关键字
super
从子类的构造方法中调用。 - 构造方法可以调用重载的构造方法或它的父类的构造方法。这种调用必须是构造方法的第一条语句。如果没有显式地调用它们中的任何一个,编译器就会把
super()
作为构造方法的第一条语句,它调用的是父类的无参构造方法。 - 为了覆盖一个方法,必须使用与它的父类中的方法相同的签名来定义子类中的方法。
- 实例方法只有是可访问的时候才能覆盖。这样,私有方法是不能覆盖的,因为它是不能在类本身之外访问的。如果子类中定义的方法在父类中时私有的,那么这两个方法是完全没有关系的。
- 静态方法与实例方法一样可以继承。但是,静态方法不能覆盖,如果父类中定义的静态方法在子类中重新定义,那么父类中定义的方法被隐藏。
- Java 中的每个类都源于
Java.lang.Object
类。如果一个类在定义时没有指定继承关系,那么它的父类就是Object
。 - 如果一个方法的参数类型是父类(
例如:Object
),可以向该方法的参数传递任何子类(例如:Circle 类或 String 类
)的对象。当在方法中使用一个对象(例如:Circle对象或String 对象
)时,动态的决定调用该对象方法(例如:toString
)的某个特征的实现。(C++ 中的使用虚函数实现动态连编)。
- 因为子类的实例总是它的父类的实例,所以,总是可以将一个子类的实例转换成一个父类的变量。当把父类的实例转换成它的子类变量时,必须使用转换记号(子类名)进行显式转换,向编译器表明你的意图。
- 一个类定义一个类型。子类定义的类型称为子类型,而父类定义的类型称为父类型。
- 当从引用变量调用实例方法时,该变量的实际类型在运行时决定使用该方法的哪个实现。当访问数据域或静态方法时,引用变量的声明类型在编译时决定使用哪个方法。
- 可以使用表达式
obj instanceof AClass(对象名 instanceof 类名)
测试一个对象是否是一个类的实例。 - 可以使用
protected
修饰符来防止方法和数据被不同包的非子类访问。 - 可以使用
final
修饰符来表明一个类是终极的,是不能成为父类的;并且用它来表明一个方法是终极的,是不能覆盖的。
网友评论