类继承,定义了一个点类point,然后线条类line继承了point类,正方形类square继承line类

类继承,定义了一个点类point,然后线条类line继承了point类,正方形类Suare继承line类

正方形四个角坐标关系如图

  1 /**
  2  *
  3 java继承实例。
  4
  5
  6 定义了一个点类point,然后线条类line继承了point类,正方形类square继承line类。
  7
  8  */
  9
 10 //点类
 11 class PointDemo
 12 {
 13     private int x;
 14     private int y;
 15     private static int pCount=0;
 16
 17     //默认初始化坐标点(0,0),坐标点数计数+1
 18     PointDemo(){
 19         this.x=0;
 20         this.y=0;
 21         pCount++;
 22     }
 23
 24     //带有x,y坐标参数构造函数,坐标点数计数+1
 25     PointDemo(int x, int y){
 26         this.x=x;
 27         this.y=y;
 28         pCount++;
 29     }
 30
 31     //设置坐标x,y值
 32     public void setPoint(int x,int y){
 33         this.x=x;
 34         this.y=y;
 35     }
 36
 37     //返回获取X,Y坐标值
 38     public int getX(){return x;}
 39     public int getY(){return y;}
 40
 41     //返回程序累积坐标计数
 42     public static int getPCount(){return pCount;}
 43
 44 }
 45
 46 //行类继承点类
 47 class LineDemo extends PointDemo
 48 {
 49     private PointDemo po1;
 50     private PointDemo po2;
 51     private float range;
 52     private static int lCount=0;
 53
 54     //返回程序累积线数计数
 55     public static int getLCount(){return lCount;}
 56
 57     //默认空参构造函数,默认坐标(0,0),(4,3),初始化两坐标之间的长度,线数计数+1
 58     LineDemo(){
 59         po1=new PointDemo();
 60         po2=new PointDemo(4,3);
 61         setRange();
 62         lCount++;
 63     }
 64
 65     //两坐标参数构造函数,初始化两坐标和坐标之间的长度,线数计数+1
 66     LineDemo(PointDemo po1,PointDemo po2){
 67         this.po1=po1;
 68         this.po2=po2;
 69         setRange();
 70         lCount++;
 71     }
 72
 73     //返回获取两点坐标值
 74     public PointDemo getPo1(){return po1;}
 75     public PointDemo getPo2(){return po2;}
 76
 77     //设置两点之间的长度
 78     public void setRange(){
 79         range=(float)Math.sqrt(Math.pow(Math.abs(po2.getX()-po1.getX()),2)+Math.pow(Math.abs(po2.getY()-po1.getY()),2));;
 80     }
 81     public float getRange(){return range;}
 82
 83     //输出两点坐标及两点之间的距离
 84     public void out(){
 85         System.out.println("___________________________");
 86         System.out.println("("+po1.getX()+","+po1.getY()+")");
 87         System.out.println("("+po2.getX()+","+po2.getY()+")");
 88         System.out.println("range="+range);
 89         System.out.println("===========================");
 90     }
 91 }
 92
 93 //正方型类
 94 /*
 95 (X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4)
 96 A = X2-X1,     B =  Y2-Y1;
 97 X3  =   X1+(A-B)     =   X1+(X2-X1-Y2+Y1)   =    X2-Y2+Y1;
 98 Y3  =   Y1+A+B       =   Y1+X2-X1+Y2-Y1     =    X2-X1+Y2;
 99 X4  =   -(X2-(A-B))  =   -(X2+Y2-Y1-X2+X1)  =    Y1-X1-Y2;
100 Y4  =   Y2+(A-B)     =   Y2+X2-X1-Y2+Y1     =    X2-X1+Y1;
101
102 */
103 class Square extends LineDemo
104 {
105     private LineDemo[] line = new LineDemo[6];
106     private PointDemo[] point = new PointDemo[4];
107     private static int sCount=0;
108
109     //返回累积正方形个数计数
110     public static int getSCount(){return sCount;}
111
112     //空参构造函数,默认初始化正方形四个角坐标及边长和周长的长度,正方形个数计数+1
113     Square(){
114         super();
115         setSquarePoint();
116         setSquareLine();
117         sCount++;
118     }
119
120     //两坐标点参数构造函数,初始化正方形四个角坐标及边长和周长的长度,正方形个数计数+1
121     Square(PointDemo po1,PointDemo po2){
122         super(po1,po2);
123         point[0]=po1;
124         point[1]=po2;
125         setSquarePoint();
126         setSquareLine();
127         sCount++;
128     }
129
130     //一条边长做参数的构造函数,初始化正方形四个角坐标及边长和周长的长度,正方形个数计数+1
131     Square(LineDemo line){
132         super(line.getPo1(),line.getPo2());
133         point[0]=line.getPo1();
134         point[1]=line.getPo2();
135         setSquarePoint();
136         setSquareLine();
137         sCount++;
138     }
139
140     //设置正方形四个角坐标
141     private void setSquarePoint(){
142         int x1=point[0].getX();
143         int y1=point[0].getY();
144         int x2=point[1].getX();
145         int y2=point[1].getY();
146         point[2] = new PointDemo(x2-y2+y1,x2-x1+y2);
147         point[3] = new PointDemo(y1-x1-y2,x2-x1+y1);
148     }
149
150     //设置正方形所有边长和对角线坐标及长度
151     private void setSquareLine(){
152         for (int i=0,k=0;i<point.length ;i++ )
153         {
154             for (int j=i+1;j<point.length ;j++,k++ )
155             {
156                 line[k] =new LineDemo(point[i],point[j]);
157             }
158         }
159
160     }
161
162     //输出所有边长和对角线坐标及长度
163     public void outAllLine(){
164         for (LineDemo li : line)
165         {
166             li.out();
167         }
168     }
169
170     //输出正方形四个角坐标
171     public void outPoint(){
172         for (int i=0;i<point.length ;i++ )
173         {
174             System.out.println("point["+i+"] = ("+point[i].getX()+","+point[i].getY()+")");
175         }
176     }
177 }
178
179 class ExtendsDemo
180 {
181     public static void main(String[] args)
182     {
183         //测试点
184         PointDemo[] pArr = new PointDemo[10];
185         for (int i=0,j=10;i<pArr.length ;i++,j-- )
186         {
187             pArr[i]=new PointDemo(i,j);
188         }
189         for (PointDemo po: pArr )
190         {
191             System.out.println("("+po.getX()+","+po.getY()+")");
192         }
193         System.out.println("pointCount="+PointDemo.getPCount()+"\n");
194
195         //测试线
196         LineDemo line = new LineDemo();
197         line.out();
198         System.out.println("lineCount="+LineDemo.getLCount()+"\n");
199         LineDemo line1 = new LineDemo(pArr[0],pArr[9]);
200         line1.out();
201         System.out.println("lineCount="+LineDemo.getLCount()+"\n");
202         System.out.println("pointCount="+LineDemo.getPCount()+"\n");
203
204         //测试正方形
205         Square su = new Square(line1);
206         System.out.println("显示所有坐标");
207         su.outPoint();      //显示所有坐标
208         System.out.println("显示所有边坐标及长度");
209         su.outAllLine();    //显示所有边坐标及长度
210         System.out.println("SquareCount="+Square.getSCount()+"\n");
211     }
212 }
时间: 2024-10-06 15:32:06

类继承,定义了一个点类point,然后线条类line继承了point类,正方形类square继承line类的相关文章

苹果公司的新的编程语言 Swift 高级语言(十一)--初始化类的析构函数的一个实例

一 .实例的初始化          实例的初始化是准备一个类.结构或枚举的实例以便使用的过程. 初始化包含设置一个实例的每个存储属性为一个初始值,以及运行不论什么其他新的实例可以使用之前须要的设置或初始化. 一个类.结构或枚举能定义一个初始化方法来设置它的特性,用来确保它的实例的全部属性都有有效的初始值. 通过调用类.结构或枚举提供的初始化方法来运行实例的初始化过程. 类的实例也能实现一个析构,用来在类的实例释放之前运行不论什么特定的清除过程来释放分配的专有资源. 1 . 初始化方法的定义 初

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明

C++ Primer 学习笔记_15_类与数据抽象(1)_类的定义和声明 在C++中,用类来定义自己的抽象数据类型.通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写.调试和修改程序.可以使得自己定义的数据类型用起来与内置类型一样容易和直观. 看一下Sales_item类: class Sales_item { private: std::string isbn; unsigned units_sold; double revenue; public: double ave_pr

C++类的定义之作用域

每个类都定义了自己的新作用域和唯一的类型.在类的定义体内声明内成员,将成员名引入类的作用域.两个不同的类具有两个不同的类作用域. 例如: Class First { int memi; double memd; }; Class Second { int memi; double memd; }; First obj1; Second obj2=obj1;//error:obj1and obj2 have different types 上例说明 即使两个类具有完全相同的成员列表,它们也是不同的

C++ Primer 学习笔记_47_类与数据抽象 --类的定义和声明【上】

类 --类的定义和声明[上] 引言: 在C++中,用类来定义自己的抽象数据类型.通过定义类型来对应所要解决的问题中的各种概念,可以使我们更容易编写.调试和修改程序.可以使得自己定义的数据类型用起来与内置类型一样容易和直观. 一个前面曾经定义过的类: class Sales_item { private: std::string isbn; unsigned units_sold; double revenue; public: double ave_price() const; bool sam

3.1.9 类内部定义的函数:绑定方法与非绑定方法

'''在类内部定义的函数,分为两大类: 一:绑定方法:绑定给谁,就应该由谁来调用,谁来调用就会把调用者当作第一个参数自动传入 1. 绑定到对象的方法:在类内定义的没有被任何装饰器修饰的 2. 绑定到类的方法:在类内定义的被装饰器@classmethod修饰的方法 二:非绑定方法:没有自动传值这么一说了,就类中定义的一个普通工具,对象和类都可以使用 非绑定方法:不与类或者对象绑定,在类内定义的被装饰器@staticmethod修饰的方法 说明:未做任何修饰时:在类内定义的方法是绑定给对象的,对象调

c++学习笔记之基础---类内声明函数后在类外定义的一种方法

在C++的“类”中经常遇到这样的函数, 返回值类型名 类名::函数成员名(参数表){ 函数体.} 双冒号的作用 ::域名解析符!返回值类型名 类名::函数成员名(参数表) { 函数体. } 这个是在类内声明函数后在类外定义的一种方法!如果不加"类名::"的话,编译系统就不会知道你的函数属于哪个类;另外,这样定义函数一定要在类中声明之后,说明它是类的成员函数才可以!在类内声明的时候就不需要::了,直接 返回值类型 函数名(参数表) 就可以了!

如果一个类同时继承的两个类都定义了某一个函数会怎样呢

如果一个类同时继承的两个类都定义了某一个函数会怎样呢 | Code4Fun 盒子 盒子 博客 分类 标签 友链 关于 RSS 搜索 入下面所示:类C同时继承了A和B,并且两个都定义了相同的函数,如果这时候编译的话会得到错误. 1 2 3 4 5 6 7 8 9 10 testhir.cpp: In function 'int main(int, const char**)': testhir.cpp:26:7: error: request for member 'printR' is ambi

Python学习笔记2:类的定义和继承

# 类的定义 格式: class 类名(父类): __init(self,参数) 成员方法 成员变量 # 所有类的基础object #  私有方法和变量使用__开头 例如:定义一个鸟类 class Bird(object): __have_feather = True # 私有属性:是否有羽毛 way_of_reproduct = "egg" # 公有属性:繁殖方式 def move(self, dx, dy): # 公有方法 position = [0,0] position[0]

Swift学习——类的定义,使用,继承,构造等(五)

Swift学习--类的定义,使用.继承,构造等(五) 类的使用说明 1 使用class和类名来创建一个类名,比如: class student 2 类中属性的声明和常量和变量一样,唯一的差别就是他们的上下文是类 3 方法和函数声明也一样 // 1 ---- 简单的类介绍 class Student{ //变量学号初始化为0 var num = 0; //成员函数 func GetNum()->Int{ return num } } //创建类的实例对象 var student = Student