Java类的继承
一 类的继承
继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一班类的状态和行为,并根据需要增加它自己的新的状态和行为。由继承而得到的类称为子类,被继承的类称为父类,超类。Java不支持多重继承,子类只能有一个父类。
1 创建子类
在类的声明中,通过使用关键字extends来创建一个类的子类,格式如下:
class 子类名 extends 父类名
例如:
class Students extends People
把Students 声明为People类的子类。People是Students的父类。
2 子类的继承性
1 子类和父类在同一包中的继承性
如果子类和父类在同一个包中,那么,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然的继承了父类中不是private的方法作为自己的方法。
例子17:
import java.applet.*;
import java.awt.*;
class Father
{
private int money;
float weight,height;
String head;
String speak(String s)
{
return s;
}
}
class Son extends Father
{
String hand,foot;
}
public class Example4_17 extends Applet
{
Son boy;
public void init()
{
boy=new Son();
boy.weight=1.8f;
boy.height=120f;
boy.head="一个头";boy.hand="两只手";
boy.foot="两只脚";
}
public void paint(Graphics g)
{
g.drawString(boy.speak("我是儿子"),5,20);
g.drawString(boy.hand+boy.foot+boy.head+boy.weight+boy.height,5,40);
}
}
2 子类和父类不在同一包中的继承
如果子类和父类不在同一包中,那么,子类继承了父类的protected,public成员变量做为子类的成员变量,并且继承了父类的protected,public方法为子类的方法。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。
下面的例子中,Father和Jerry分别隶属不同的包。
例子18:
Father.java:
package tom.jiafei;
public class Father
{
int height;
protected int money;
public int weight;
public Father(int m)
{
money=m;
}
protected int getMoney()
{
return money;
}
void setMoney(int newMoney)
{
money=newMoney;
}
}
Jerry.java:
package sun.com;
import tom.jiafei.Father;
public class Jerry extends Father //Jerry 和Father在不同的包中
{
public Jerry()
{
super(20);
}
public static void main(String args[])
{
Jerry jerry=new Jerry();
jerry.height=12; //非法,因为Jerry没有继承友好的height
jerry.weight=200; //合法
jerry.money=800; //合法
int m=jerry.getMoney(); //非法,因为Jerry没有继承友好的方法setMoney
System.out.println("m="+m);
}
}
注:如果一个类的声明中没有使用extends 关键字,这个类被系统默认为是Object的子类。Object是包java.lang中的类。
3 成员变量的隐藏和方法的重写
当我们在子类中定义的成员变量和父类中的成员变量同名时,则父类中的成员变量不能被继承,此时称子类的成员变量隐藏了父类的成员变量。当子类中定义了一个方法,并且这个方法的名字,返回类型,及参数个数和类型和父类的某个方法完全相同时,父类的这个方法将被隐藏。我们说,我们重写了父类的方法或置换了父类的方法。
子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为。在下面的例子中,子类重写了父类的方法f。
对于子类创建的一个对象,如果子类重写了父类的方法,则运行时系统调用了类重写的方法,如果子类继承了父类的方法(未重写),那么子类创建的对象也可以调用这个方法,只不过方法产生的行为和父类的相同而已。如下述例子。
例子20:
import java.applet.*;
import java.awt.*;
class Area
{
float f(float r)
{
return 3.14159f*r*r;
}
float g(float x,float y)
{
return x+y;
}
}
class Circle extends Area
{
float f(float r)
{
return 3.14159f*2.0f*r;
}
}
public class Example4_20 extends Applet
{
Circle yuan;
public void init()
{
yuan=new Circle();
}
public vid paint(Graphics g)
{
g.drawString("yuan="+yuan.f(5.0f),5,20); //调用子类重写的方法f.
g.drawString(" "+yuan.g(2.0f,8.0f),5,40); //调用继承父类的方法g.
}
}
注:重写父类的方法时,不可以降低方法的访问权限。下面的代码中,子类重写父类的方法f,该方法在父类中的访问权限是protected级别,子类重写时不允许级别低于protected级别。
import java.applet.*;
import java.awt.*;
class Chengji
{
protected float f(float x,float y)
{
return x*y;
}
}
class Xiangjia extends Chengji
{
float f(float x,float y) //非法,因为降低了访问级别。
{
return x+y;
}
}
class Xiangjian extends Chengji
{
public float f(float x,float y) //合法,没降低访问级别。
{
return x-y;
}
}
4 final 类final方法
final 类不能被继承,即不能有子类,如
final class A
{ …… }
A就是一个final类。有时候是出于安全性的考虑,将一些类修饰为final类。例如,Java提供的String类,它对于编译器和解释器的正常运行有很重要的作用,对它不能轻易改变,因此它被修饰为final类。
如果一个方法被修饰为final方法,则这个方法不能被重写,如果一个成员变量被修饰为final的,就是常量。
分享到:
相关推荐
在Java编程语言中,类继承是面向对象设计的一个核心特性,它允许我们创建一个新类(子类)作为现有类(父类)的扩展。当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、...
在Java编程语言中,类继承是面向对象编程的一个核心特性,它允许一个类(子类或派生类)从另一个类(父类或基类)继承属性和方法,从而实现代码的重用和扩展。本资源包含了一份关于Java类继承的源码示例,非常适合...
1. **类的继承**:在Java中,继承是面向对象编程的重要特性,允许一个类(子类)继承另一个类(父类)的属性和方法。例如,我们可以创建一个`Music`类作为其他音乐相关类的基类。 2. **构造方法**:构造方法用于...
Java 中继承与多态的题目 本资源摘要信息是关于 Java 中继承和多态的题目,涵盖了面向对象编程的基本概念和继承机制的应用。 继承的概念 继承是面向对象编程的一种机制,允许一个类(子类)继承另一个类(父类)...
说明: 这是一个包含两个类的Java程序代码示例,Person类表示一个人的基本信息,包括姓名、年龄和爱好列表;Student类表示一个学生对象,继承自Person类,并添加了学生ID和专业名称的信息。主程序入口Main类中创建了两...
这个例子展示了Java继承的核心概念,包括: 1. 使用`extends`关键字创建子类。 2. 访问和覆盖父类的方法。 3. 添加子类特有的方法。 4. 多态性的应用。 通过学习这个实例,开发者能够更好地理解和运用Java的继承...
Java类继承关系中的初始化顺序实例详解 Java类继承关系中的初始化顺序是Java编程语言中的一個重要概念。该概念关系到类的初始化顺序,静态成员变量的初始化顺序,普通成员变量的初始化顺序等。在本文中,我们将详细...
在Java编程语言中,类的继承是面向对象编程的一个核心概念,它允许我们创建新的类(子类)基于已存在的类(父类或超类)。继承提供了代码的复用性,使得子类可以共享父类的属性和方法,同时还可以添加自己的特定功能...
在这个特定的程序中,我们看到了一个关于Java继承的实例,它演示了子类对象初始化时涉及的各个步骤,包括构造方法、初始化值、父类构造方法以及父类的初始化值。 首先,我们有一个名为`Parent`的父类,它有两个实例...
Java 类继承实验报告 本实验报告的主要目的是掌握 Java 中的类定义、对象创建和使用、类继承的概念,以及派生类的定义。实验中,我们将定义一个名为 MyRectangle 的类,代表矩形,并派生出一个名为 MyCuboid 的子类...
java类和对象继承多态性 java类和对象继承多态性是java语言中的一种基本机制,它允许开发者创建一个新的类,并继承已有的类的属性和行为。这种机制可以提高代码的复用性和维护性。 继承是java语言中的一种机制,...
Java 类的继承是其面向对象特性中的核心概念之一,它为代码重用和构建复杂的软件结构提供了基础。在 Java 中,一个类可以扩展另一个类的功能,这个被扩展的类被称为父类(或超类),而扩展的类则称为子类(或派生类...
在这个名为“李兴华java继承的应用”的主题中,我们将深入探讨Java类继承的概念、语法以及其在实际编程中的应用。 1. **类的继承概念** 在Java中,类的继承是通过使用关键字`extends`来实现的。子类可以获取父类的...
在Java编程语言中,类的继承是面向对象编程的一个核心概念。这个实例是关于如何在超市购物场景下应用继承机制的。在这个系统中,我们有以下几个关键类:`ShoppingCar`(购物车)、`Database`(数据库)、`McBean`...
了解这些概念后,我们可以看到`GenericClass.java`文件可能包含了关于如何创建和使用继承泛型类的实际代码示例。而`Java.jpg`可能是用于辅助解释的图像,比如类结构图或代码截图。在实际学习过程中,结合代码和图像...
JavaIO类InputStream/OutputStream继承关系图,使您对IO类一目了然
Java中的类与继承是面向对象编程(Object-Oriented Programming, OOP)的核心概念,它们在构建复杂的软件系统中起到至关重要的作用。面向对象编程是一种编程范式,它基于对象和类的概念,通过继承、封装和多态等特性...
Java继承是面向对象编程(OOP)的一种机制,允许一个类继承另一个类的成员变量和成员方法。通过继承,可以实现代码的重用和扩展。 在Java中,继承是通过使用关键字`extends`来实现的。例如,`class B extends A`...
在Java编程语言中,`extends`关键字用于实现类的继承机制。类的继承是面向对象编程的一个核心特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展。下面将详细探讨`extends`...
Java 类和继承是面向对象编程的核心概念,它们构成了Java程序设计的基础。在这个代码集中,我们很显然会看到一系列关于如何创建和使用Java类以及实现继承的示例代码。以下是对这些概念的详细解释: 1. **Java 类**...