继承是面向对象方法中的一个重要概念。特殊类拥有一般类的属性和操作。称为特殊类对一般类的继承。继承是一种由已有类来扩展新类的机制,也是面向对象技术可提高软件开发效率的一个重要原因。
多态是指一不同方式响应同一方法调用的能力。
在子类中,不能直接访问从父类中 继承的私有成员和方法。但可以通过调用从高父类继承的公有方法(这个方法返回了父类中的私有变量和方法)达到间接调用的目的
对于可直接访问的静态成员变量,父类、子类、父类对象及子类对象均共享同一个静态变量。
子类的构造方法:
在类的继承层次结构中,父类和子类都有字节构造方法。但子类不会继承父类的构造方法。但子类对象中既包含了从直接父类继承类的成员变量,也包含了它新定义的成员变量,为了构造一个子类对象,必须对所有这些变量进行正确的初始话。在调用子类的构造方法的时候,子类的构造方法又会在不显示调用父类构造方法的情况下隐式调用父类的默认构造方法(即什么参数都没有的那种)。当然父类构造方法有参数或者怎样,你可以用super()显示调用父类的构造方法,但这个方法必须在子类构造方法的第一句。
方法的覆盖和成员变量的隐藏
方法的覆盖:在子类中定义一个与父类中的方法具有相同声明的实例成员方法叫做子类成员方法对哦父类方法的覆盖,简称覆盖。
成员变量的隐藏:子类中定义了与父类中相同的成员变量时。这时,在子类对象中,虽然从父类继承的成员变量仍然存在,但是已经无法直接访问它了,必须使用super关键字或父类的一个应用调用它了。这就是成员变量的隐藏
注意一点:如果有两个类,一个类来自父类,一个类来自子类。然后一个变量来自父类,在子类中也有同名的变量。那么在子类调用继承来自父类的方法时,使用的仍然是父类的那个变量。而在子类中调用子类定义的方法,使用同名变量来自子类定义的变量。
父类变量引用子类对象:通过父类引用变量引用子类对象时,父类引用变量只能调用子类对象中从父类所继承来的或重定义的方法,调用子类对象中自己额外定义的方法会导致编译错误。
instanceof运算符用来判断左边的表达式的对象是否属于右边类的子类或同一个类。是则返回true否则false
final关键字
final关键字可用来修饰类、方法、变量
修饰类:当用final关键字修饰某个类时,这是,该类就不能被其他类继承。通常我们也将final类称为终结类
修饰方法:用final关键字修饰某个方法时,则该方法不能被子类中的方法进行覆盖。
修饰变量:final关键字修饰的变量只能被赋值一次,赋值以后,该值不能被再改变
抽象类和接口:
抽象类要在类名前加一个abstract修饰。另外类中必须有[f访问修饰符] abstract 返回类型 方法名称(【参数列表】);定义抽象方法是没有实体的。抽象类是不可以实例化的。
从一个抽象父类中派生子类时,有两种情况。第一种情况,只要没把所有的抽象方法具体实现完,该类还是抽象类。第二种是全部实现完的类,这个类才可以被实例化。
在一个抽象类中也可以有成员变量;另外在一个抽象类中也可以有不是abstract修饰的成员方法。
定义接口
[修饰符] interface 接口名 [extends 接口名]{
static final 数据类型 常量名=常量数据;
返回值类型 方法名(【参数】);
}
接口中所有方法和属性都只能用public修饰。所以public可以省去,另外接口中所有方法都要求是abstract所以也可以不写。
接口的实现:implements关键字
关于继承多态:与继承有关的多态:在一个类的继承体系层次中,如果一个子类覆盖了父类中的某个实例方法,当我们用一个引用了子类对象的父类变量调用被覆盖的方法时。此时,程序执行的是具体的子类对象中的方法。
关于接口的多态:与接口有关的特性是指用一个接口类型的变量引用实现了该接口的类的对象时,调用某个接口方法时,是执行的引用的那个对象里具体的方法。