Java语言基础23-27--子类与继承

子类与继承

利用继承,可以先编写一个共有属性一般类,根据该一般类再编写具有特殊属性的新类,

新类继承一般类的状态和行为,并根据需要增加它自己的新的状态和行为。
由继承而得到的类称为子类,被继承的类称为父类(超类)。
声明一个类的子类的格式如下:
class 子类名 extends 父类名 {
    … … 

例如:
class Student extends People {
    … … 
}

一、子类的继承性

所谓子类继承父类的成员变量作为自己的一个成员变量,就好象它们是在子类中直接声明一样,

可以被子类中自己定义的任何实例方法操作。
所谓子类继承父类的方法作为子类中的一个方法,就象它们是在子类中直接定义了一样,

可以被子类中自己定义的任何实例方法调用。 

1、子类与父类在同一包中的继承性

如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。

2、子类与父类不在同一包中的继承性

如果子类和父类不在同一个包中,那么,子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。

3、关于instanceof运算符

instanceof运算符是Java独有的运算符号。
instanceof是双目运算符,其左面的操作元是对象,右面的操作元是类,

当左面的操作元是右面的类或子类所创建的对象时,instanceof运算的结果是true,否则是false。 

二、成员变量的隐藏

在编写子类时,我们仍然可以声明成员变量,一种特殊的情况是,如果所声明的成员变量的名字和从父类继承来的成员变量的名字相同(声明的类型可以不同),在这种情况下,子类就会隐藏掉所继承的成员变量,即子类重新声明定义了这个成员变量。需要注意的是,子类对象仍然可以调用从父类继承的方法操作隐藏的成员变量。

三、方法重写

子类通过重写可以隐藏已继承的实例方法。
1.重写的语法规则
如果子类可以继承父类的某个实例方法,那么子类就有权利重写这个方法。
方法重写是指:子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。 
2.重写的目的
子类通过方法的重写可以隐藏继承的方法,子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。  
3.JDK 1.5对重写的改进 
在JDK 1.5版本之后,允许重写方法的类型可以是父类方法的类型的子类型,即不必完全一致.也就是说,如果父类的方法的类型是“类”,重写方法的类型可以是“子类”。  
4.重写的注意事项 
重写父类的方法时,不可以降低方法的访问权限

四、super关键字

在子类中想使用被子类隐藏的成员变量或方法就可以使用关键字super。
比如super.x、super.play()就是访问和调用被子类隐藏的成员变量x和方法play()。

五、对象的上转型对象

假设,A类是B类的父类,当用子类创建一个对象,并把这个对象的引用放到父类的对象中时,此时这个父类的对象就称之为子类创建的对象的上转型对象,比如:
A a;
B b=new B();
a=b;
或者
A a;
a=new B();
或者
A a=new B();

1、变化

2、注意事项

(1)不要将父类创建的对象和子类对象的上转型对象混淆。
(2)可以将对象的上转型对象再强制转换到一个子类对象,这时,该子类对象又具备了子类所有属性和功能。
(3)不可以将父类创建的对象的引用赋值给子类声明的对象。

六、继承与多态

当一个类有很多子类时,并且这些子类都重写了父类中的某个实例方法,那么当我们把子类创建的对象的引用放到一个父类的对象中时,就得到了该对象的一个上转型对象,那么这个上转型对象在调用这个实例方法时就可能具有多种形态,因为不同的子类在重写父类的实例方法时可能产生不同的行为。
多态性就是指父类的某个实例方法被其子类重写时,可以各自产生自己的功能行为。 

七、abstract类与abstract方法

1、注意事项

(1)和普通的类相比,abstract类可以有abstract方法,也可以有非abstract方法。
(2)对于abstract类,我们只能声明,不能使用new运算符创建该类的对象

如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的抽象的方法,给出方法体。
(3)abstract类也可以没有abstract方法。
(4)如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承这个abstract方法。
(5)对于abstract方法,只允许声明,不允许实现

2、面向抽象编程

在设计一个程序时,可以通过在abstract类中声明若干个abstract方法,表明这些方法在整个系统设计中的重要性,方法体的内容细节由它的非abstract子类去完成
使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明对象作为其子类的上转型对象,那么这个上转型对象就可以调用子类重写的方法。
所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类声明的对象。

猜你喜欢

转载自www.cnblogs.com/wack/p/10184773.html