Java程序设计入门教程--继承的特点

目录

继承 

创建子类

继承的定义格式

属性的继承

错误示例程序

子类变量隐藏父类变量


继承 

       继承是存在在于面向对象编程中的两个类之间的一种关系。
        当一个类具有另一个类的所有数据和方法的时候,就称这两个类之间具有继承关系。
        被继承的类称为父类或超类,继承了父类或超类数据和方法的类称为子类。

 

举例

        继承的关系很好地描述了现实世界中事物间存在的联系。

        比如考虑轮船和客轮这两个类。轮船具有吨位、时速、吃水线等属性(数据),并具有行驶、停泊等行为(方法);客轮在具有轮船的全部属性与行为的同时,又有自己的特殊属性(如载客量)和服务(如供餐等)。若把轮船看做父类,则客轮就是轮船的子类,对这组父子类的关系作上下扩展,则可得到如下图所示的层次关系图。

 继承具有下述特点:

1. 继承关系是传递的。若类C继承类B,类B继承类A时,则可认为类C也继承了类A,即类C具有类A中的属性和方法,也具有类B特有的属性和方法。继承来的属性和方法尽管是隐式的,却仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

2. 提供软件复用功能。若类B继承类A,建立类B时只需要再描述与基类(A)不同的少量特征(数据成员和成员方法)。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

3. 增强一致性。用来减少模块间的接口和界面,大大增加程序的易维护性。

4. 单一继承机制。Java出于安全性和可靠性的考虑,仅支持单继承,但可实现多接口。

创建子类

继承的定义格式

       Java中继承关系是通过extends关键字来实现的。

       在定义类时使用extends关键字指明新定义类的父类,新定义的类称为指定父类的子类,这样就在两个类之间建立了继承关系。

       extends关键词应用的格式如下:        

         class  subClass_name  extends  superClass_name

       继承机制最大的特点就是允许子类继承父类中的属性和方法。

         继承关系示例程序。(子类SubClass继承了父类SuperClass的两个成员变量ab以及一个方法fn1(),且子类本身新定义了一个成员变量c和方法fn2(),因此,子类当前共有3个成员变量和两个方法。

  

代码如下:

父类:

package test;

public class SuperClass {
	int a = 10;
	String b = "test";
	public int fn1(){
		return a;
	}
}

子类: 

package test;

public class SubClass extends SuperClass {
	int c = 20;
	public int fn2(){
		return c;
	}
}

主程序输出: 

package test;

public class JavaDemo {
	public static void main(String[] args) {
		SuperClass sup = new SuperClass();
		SubClass sub = new SubClass();
		
		System.out.println("父类:"+sup.a+" "+sup.b+" "+sup.fn1());
		System.out.println("子类:"+sub.a+" "+sub.b+" "+sub.c+" "+sub.fn1()+" "+sub.fn2());
	}
}

属性的继承

       父类的属性(包括所有成员变量和方法)都将被子类所继承,但被继承并不等于就一定能被访问。
       在Java中,只有非私有型(public型、或缺省型)的变量和方法能被同包子类所继承并直接访问,而对于父类中私有型(private型)的属性,子类将无权直接访问。


错误示例程序

私有属性继承。子类SubClassfn3()里越权访问了父类中的私有变量d,产生编译错误。

 

子类变量隐藏父类变量

       子类还可以对父类继承来的属性(成员变量)重新定义。

       简单地说,就是子类变量隐藏父类变量。当子类执行自身定义的方法时,操作的是自己重新定义的变量,隐藏父类继承来的变量。当子类执行父类继承来的方法时,若需要使用同名的成员变量,所使用的是父类的成员变量。

        隐藏变量示例程序。

 

猜你喜欢

转载自blog.csdn.net/u010764893/article/details/131124564