【新手】关于继承,多态的问题—— 代码已有,求大牛给每句注释一下!

【新手】关于继承,多态的问题—— 代码已有,求大牛给每句注释一下!,第1张

public class TestShape{

public static void main(String[] args){

Shape[] s=new Shape[3]//new一个Shape数组

s[0]=new Rect(4,2)

s[1]=new Square(5)

s[2]=new Circle(10)

//Shape是个接口,里面方法都是抽象的不能直接用

//接口和继承差不多,你可以理解成Rect,Square,Circle是Shape的子类吧(严格意义上穗并誉不

//能这样说,只是方便理解)

for(int i=0i<s.lengthi++){

System.out.println("ZhouChang:"+s[i].zhouChang())

System.out.println("MianJi:"+s[i].mianJi())

}

}

}

interface Shape{//这是你定义的接口Shape(形状)

double zhouChang()//未实现的public abstract double方法

double mianJi()//同上

}

class Rect implements Shape{//使用这个接口,必须要实现上面两个方法

private double chang

private double kuan

public Rect(){}//这是你这个的构造函蔽纳数

public Rect(double chang,double kuan){

//构造函数2(参数不同),使用这个构造方法时将chang kuan两个函数参数赋值给

//类成员变量this.chang 和this.kuan

this.chang=chang

this.kuan=kuan

}

public double zhouChang(){//实现接口提供的猜段方法,算周长

return (chang+kuan)*2

}

public double mianJi(){//实现接口提供的方法算面积

return chang*kuan

}

}

class Square extends Rect{//这个Square类继承了Rect,是Rect的子类

//正方形是长方形的一种

//继承了父类就要实现父类必须要实现的抽象方法(算周长,算面积)

//还有父类有的构造函数都要实现(Square()和Square(double,double)

private double bianChang

public Square(){}

public Square(double bianChang){

super()

this.bianChang=bianChang

}

public double zhouChang(){

return bianChang*4

}

public double mianJi(){

return bianChang*bianChang

}

}

class Circle implements Shape{//这个圆使用了Shape接口

private double r

//这下面两个是构造函数

public Circle(){}

public Circle(double r){

this.r=r

}

//这两个方法zhouchang和mianji都是要实现的

public double zhouChang(){

return 2*3.1415926*r

}

public double mianJi(){

return 3.1415926*r*r

}

}

还有什么问题

正方形类本来就不该继承矩形类

如果一定要继承,那就...继承吧巧碧...

class Rectangle { ... }

class Square extends Rectangle {

int size

Square(int s) { size = s}

}

你可以在Rectangle中定义一些方源宽世法,比如area()之类,然后雹肢在Square中覆盖。

#include<iostream>

using namespace std

class rect

{

public:

rect(int width, int length) : width(width),length(length){}

int Area()

{

return length * width

}

int Perimeter()

{

return 2 * (length + width)

}

friend int add(rect &r1, rect &r2)

private:

int length

int width

}

int add(rect &r1,rect &r2)

{

return r1.Area() + r2.Area()

}

int main()

{

rect rect1(2,4), rect2(4,6)

cout<<"rect1的面积是"<<rect1.Area()<<endl

cout<<"rect1的周长是孙含迅老亏"<<rect1.Perimeter()<<endl

cout<<"rect2的面积是"<<rect2.Area()<<endl

cout<<"rect2的周长是"<<rect2.Perimeter()<<endl

cout<<"rect1 和rect2的面积之和为"<<add(rect1,rect2)<<endl

return 0

}

运则此行结果

rect1的面积是8

rect1的周长是12

rect2的面积是24

rect2的周长是20

rect1 和rect2的面积之和为32

Press any key to continue


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

原文地址: https://outofmemory.cn/yw/12546104.html

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

发表评论

登录后才能评论

评论列表(0条)

保存