java中的继承是什么

java中的继承是什么,第1张

Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。[1]

Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。

类和类之间的继承关系可以用UML符号表示,其中父类又叫超类或基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化)。

JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。

在面向对象程序设计中运用继承原则,就是在每个由一般类和特殊类形成的一般——特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和 *** 作一次性地在一般类中进行显式的定义,在特殊类中不再重复地定义一般类中已经定义的东西,但是在语义上,特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的属性和 *** 作。特殊类的对象拥有其一般类的全部或部分属性与方法,称作特殊类对一般类的继承。

继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能( *** 作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。

继承避免了对一般类和特殊类之间共同特征进行的重复描述。同时,通过继承可以清晰地表达每一项共同特征所适应的概念范围——在一般类中定义的属性和 *** 作适应于这个类本身以及它以下的每一层特殊类的全部对象。运用继承原则使得系统模型比较简练也比较清晰。

package extend

/**

 * 圆类

 * @author 枫雅

 * 2019年3月21日

 */

public class Circle {

private double r

public final static double PI = 3.14

public Circle(double r) {

this.r = r

}

public double Circumference(double r) {

return 2*PI*r

}

public double Area(double r) {

return PI*r*r

}

} package extend

/**

 * 圆柱类,继承自圆类

 * @author 枫雅

 * 2019年3月21日

 */

public class Cylinder extends Circle{

private double h

public Cylinder(double r, double h) {

super(r)

this.h = h

}

public double CeArea(double r, double h) {

return super.Circumference(r)*h

}

public double Volume(double r, double h) {

return super.Area(r)*h

}

} package extend

/**

 * 圆锥类,继承自圆柱类

 * @author 枫雅

 * 2019年3月21日

 */

public class Cone extends Cylinder{

public Cone(double r, double h) {

super(r, h)

}

public double CeArea(double r, double h) {

return super.CeArea(r, h)/2

}

public double Volume(double r, double h) {

return super.Volume(r, h)/3

}

} package extend

/**

 * 测试类

 * @author 枫雅

 * 2019年3月21日

 */

public class Test {

public static void main(String[] args) {

double r = 3

double h = 2

Circle circle = new Circle(r)

System.out.println("半径为:" + r + " 圆的周长为:" + circle.Circumference(r))

System.out.println("半径为:" + r + " 圆的面积为:" + circle.Area(r))

Cylinder cylinder = new Cylinder(3, 2)

System.out.println("底部半径为:" + r + ",高为:" + h + " 圆柱的侧面积为:" + cylinder.CeArea(r, h))

System.out.println("底部半径为:" + r + ",高为:" + h + " 圆柱的体积为:" + cylinder.Volume(r, h))

Cone cone = new Cone(3, 2)

System.out.println("底部半径为:" + r + ",高为:" + h + " 圆锥的侧面积为:" + cone.CeArea(r, h))

System.out.println("底部半径为:" + r + ",高为:" + h + " 圆锥的体积为:" + cone.Volume(r, h))

}

}

当然有

fathera=newson是属于父类引用指向了子类对象,java把这种把子类对象赋给父类引用变量称之为向上转型

区别:给你举个例子

比如,father类有一个eat()方法,son类继承了father类,也就拥有了eat()方法,并同时定义了自己的方法drink().如果是fathera=newson,则你只能调用属于father的方法eat(),而不能调用son的方法drink().也就是说虽然变量a指向了对象son,但由于它编译时的类型是father,所以它不能调用属于son的方法,尽管变量a运行时的类型是son.

而sona=newson中的a则可以调用属于它自己的方法drink().和它继承的方法eat(),因为a这个引用变量编译时的类型和运行时的类型都是son.

再说的大众些,fathera=newson是以父亲的角度看儿子,由于父子之间有继承关系,你是创造了一个儿子对象并把它当父亲用,所以你只能调用属于父亲的方法,而sona=newson就是你是创造了一个儿子对象并把它当儿子,所以你可以调用属于儿子的方法和他所继承父亲的方法

以后你理解了多态以后,就好理解这个问题了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11945936.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存