一、继承
1.继承可以使你定义一个通用的类(父类),之后扩充该类为一个更加特定的类(子类)。
子类从父类中继承可访问的数据域和方法,还可以添加新的数据域和新方法。
语法:public class Subclass extends Superclass;
2.父类中的私有数据域在该类之外是不可访问的,故不能在子类中直接使用,若父类中
定义了公共的访问器/修改器,那么可以通过这种方式来访问它们。
3.Java不允许多重继承,一个Java类只能直接继承自一个父类(单一继承 simple
inheritance),但多重继承可以通过接口来实现。
4.super关键字
1)super是指这个super关键字所在类的父类。
2)两种用途:
i.调用父类的构造方法;
语法:super(); 或 super(parameters);
必须出现在子类构造方法的第一行。
构造方法链:
如果没有显式调用重载的构造方法或父类的构造方法,编译器就会自动把
super()作为构造方法的第一条语句。
如 public ClassName(){
}
等价于public ClassName(){
super();
}
(这个过程可以链式传递至继承体系结构的做后一个构造方法被调用为止)
ii.调用父类的方法;
语法:super.methodName(parameters);
注:一般不需要加super,因为子类以及继承了父类的方法。但在方法重写的时候
若要调用父类方法,必须加super
方法重写(method overriding):需要在子类中使用和父类一样的签名及一样
的返回值类型。
使用重写标注来避免方法重写与方法重载的混淆错误:
重写标注@override 表示被标注的方法必须重写父类的一个方法,具有该标注
的方法没有重写父类的方法,编译器将报告一个错误。
5.要设计一个可被继承的类,最好提供一个无参构造方法,避免程序错误。
public class Apple extends Fruit{
}
class Fruit{
public Fruit(String name)
{
}
}
由于子类中没有显式定义的构造方法,故默认使用无参构造方法,但Fruit中没有定义
无参构造方法,故会出现编译错误。
二、多态
1.多态意味着父类的变量可以指向子类对象
2.父类型和子类型。
1)一个类实际上定义了一种类型,子类定义的类型称为子类型,父类定义的类型称为父
类型(subtype and supertype)。可以将子类的实例传递给需要父类型的参数。
2)多态意味着使用父类型的地方都可以使用子类的对象
3)总可以将一个子类的实例转换为一个父类的变量,但反过来需要进行显式的转换,
方法同数据类型的转换。
4)一个好的经验是把变量定义为父类型,这样做它就可以接受任何子类型的值。
5)instanceof
用于确保一个对象是另一个对象的实例。
6)对基本类型值转换和对对象引用转换的不同
转换基本类型值返回一个新的值,而转换一个对象引用不会创建一个新的对象。