简述JAVA中继承实现代码复用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简述JAVA中继承实现代码复用相关的知识,希望对你有一定的参考价值。

看看下面这个例子,就会明白了:JAVA中继承可以实现代码复用,

由于在父类中已经定义的方法,被子类继承以后,就可以使用,实现了代码的复用

class Father
private int moneyDollar=300;
int moneyHK=200;
int add(int x,int y)
return x+y;


class Son extends Father
int moneyRMB=800;
public void changMoneyHK(int x)
moneyHK=x;

public void changMoneyRMB(int x)
moneyRMB=x;

int subs(int x,int y)
return x-y;


class GrandSon extends Son
int multi(int x,int y)
return x*y;


public class Example5_1
public static void main(String args[])
int a=5,b=3;
Son son=new Son();
GrandSon sunzi=new GrandSon();
son.changMoneyHK(666);
son.changMoneyRMB(5000);
System.out.println("儿子的港币是继承的属性,当前的值是:"+son.moneyHK);
System.out.println("儿子的人民币是新增的属性,当前的值是:"+son.moneyRMB);
System.out.printf("减法是儿子新增的功能,%d-%d等于%d\n",a,b,son.subs(a,b));
System.out.printf("加法是儿子继承的功能,%d+%d等于%d\n",a,b,son.add(a,b));
System.out.println("孙子的港币和人民币都是继承的属性,,当前的值是:");
System.out.println("港币:"+sunzi.moneyHK+" 人民币:"+sunzi.moneyRMB);
System.out.printf("乘法是孙子新增的功能,%d*%d等于%d\n",a,b,sunzi.multi(a,b));
System.out.printf("加法是孙子继承的功能,%d+%d等于%d\n",a,b,sunzi.add(a,b));
System.out.printf("减法是孙子继承的功能,%d-%d等于%d\n",a,b,sunzi.subs(a,b));

参考技术A Java中使用"extends"作为其扩充父类别的关键字,其实就相当於我们一般所常称的继承(Inherit),只不过"extends"除了继承之外,还有将继承下来的类别予以新增定义的意思。

直接使用一个实际例子来说明好了:

* Point2D.java

public class Point2D
private int x, y;

public Point2D()
public Point2D(int x, int y) this.x = x; this.y = y;
public int getX() return x;
public int getY() return y;


* Point3D.java

public class Point3D extends Point2D // 扩充Point2D类别
private int z; // 新增私用资料

public Point3D()
super();


// 建构函式,同时指定呼叫父类别建构函式
Point3D(int x, int y, int z)
super(x, y);
this.z = z;


// 新增函式
public int getZ() return z;


* UseExtend.java

public class UseExtend
public static void main(String[] args)
Point3D p1 = new Point3D(1, 3, 4);
Point3D p2 = new Point3D();

System.out.printf("p1: (%d, %d, %d) \n",
p1.getX(), p1.getY(), p1.getZ());
System.out.printf("p2: (%d, %d, %d) \n",
p2.getX(), p2.getY(), p2.getZ());



执行结果:
p1: (1, 3, 4)
p2: (0, 0, 0)

当您扩充某个类别时,该类别的所有public成员都可以在衍生类别中被呼叫使用,而private成员则不可以直接在衍生类别中被呼叫使用;在这个例子中,Point2D中已经有x, y两个成员,您新增z成员,而方法上您新增一个public的getZ()方法,而getX()与getY()直接继承父类别中已定义的内容。

在扩充某个类别之后,您可以一并初始父类别的建构方法,以完成相对应的初始动作,这可以使用super()方法来达到,它表示呼叫基底类别的建构方法。

父类别的public成员可以直接在衍生类别中使用,而private成员则不行,private类别只限於定义它的类别来存取,如果想要与父类别的 private成员沟通,就只能透过父类别中继承下来的public函式成员,例如上例中的getX()与getY()方法。
参考技术B 下面这个例子就是S类中没有print()方法,但是他继承了P类,所以可以调用P类的print()方法,实现了简单的代码重用。

class P
public void print()
System.out.prinln("this is p");

public static void main(String[] args)
S s = new S();
s.print();


class S extends P
参考技术C 传说中能造人的只有女娲一个,为什么?因为人类产生之后,就不需要再造人了,而只要人类继承上一辈的就可以了,这就是继承 参考技术D 超类的方法和属性,子类可以直接调用

以上是关于简述JAVA中继承实现代码复用的主要内容,如果未能解决你的问题,请参考以下文章

java中的继承定义。

JAVA代码重用机制复用类之继承语法(附源码)

java特性之继承

《JAVA编程思想》学习笔记——第七章 复用类

java中为啥要使用继承

面对对象-继承