ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

夜光精华:Java面向对象编程 学习笔记(三)在校资源

2019-06-11 14:48:17  阅读:299  来源: 互联网

标签:Java 构造方法 int 子类 width 面向对象编程 return 父类 夜光


夜光序言:

 

“你离我有多远呢,果实呀?“

”我藏在你的心里呀,花呀。”

 

 

 

 

 

 

 

 

 

 

 

正文:Java的继承与多态

 


 

属性的继承与隐藏


方法的继承、重载与覆盖


父类对象与子类对象的使用与转化

 

 


构造方法的重载与继承

 

 

/* 例: 一个表示图形的类 Shapes.java */
abstract class Shapes     //定义一个名为Shape的抽象类
{
    protected double circumference;         // 图形的周长
    protected double area;                  // 图形的面积
    abstract void setCircumference();       //抽象方法:计算周长
    abstract void  setArea();               //抽象方法:计算面积
    public double getCircumference()           //实例方法: 获取周长
    {
       return  circumference ;
    }
     public double getArea()              //实例方法: 获取面积
     {
        return  area ;
     }
}

 

 

class Rectangle extends Shapes  //继承于Shapes的子类:矩形类
{
  protected int height;                //矩形的高度
  protected int width;                 //矩形的宽度
  Rectangle(int h,int w)  //构造方法,带2个参数:高度、宽度
  {
    height=h;
    width=w;
  }
  public void setCircumference()  //覆盖计算周长的父类方法
  {
    circumference=2*(height+width);
  }
  public void setArea()          //覆盖计算面积的父类方法
  {
    area=height*width;
  }
  public String toString()
  {
    return ""+area;
  }
}

 

class Box extends Rectangle  //继承于Rectangle的子类:矩形框类
{
  private int width;   //内部正方框的宽度、高度,将隐藏父类同名属性
  Box(int h,int w)     //带2个参数:矩形外框高度、宽度
  {
    super(h,w);      //调用父类的构造方法,外框尺寸被赋值
  }
  Box(int h,int w,int innerw)  //带3个参数:矩形外框高度、宽度、内方框宽度
  {
    this(h,w);      //调用带2个参数的构造方法构造矩形
    width=innerw;   //确定内部正方形框的尺寸
  }
  public void setWidth(int innerw) //设置内方框尺寸的方法
  {
    width=innerw;
  }
  public int getWidth()     //获得内方框的尺寸
  {
    return width;       //如果想获取外框的宽度,可改为super.width
  }
  public void setCircumference()  //覆盖父类方法,计算周长
  {
    super.setCircumference();  //调用父类方法计算外边周长
    circumference+=4*width;    //矩形框的周长=外框+内框
  }
  public int setArea(int innerw) //重载方法setArea() ,计算内部正方形面积
  {
    return width*width;        //正方形面积
  }
  public void setArea()          //覆盖父类方法,计算面积
  {
    area=height*super.width-setArea(width); //总面积=矩形面积-内部正方形面积
  }
}

 

class TestThis{   //this的使用示例
  int y;
  TestThis(){    //构造函数1,无参
    y=10;
  }
  TestThis(int newY){  //构造函数2,带1个参数
    this();                 //   (1)在构造方法中使用this
    y=y+newY;
  }
  int max(int n1,int n2){    //方法1,带2个参数
    if(n1>n2) return n1;
    else return n2;
  }
  int max(int n1,int n2,int n3) {    //方法2 ,重载了方法1,带3个参数
    int temp=this.max(n1,n2);   //(2)在实例方法中使用this,调用方法1
    return this.max(temp,n3);
  }
  int changeY(int y) {       //带同名的参数
    this.y=y;                  //(3)使用this区分参数和成员变量
    return this.y;
  }
  int getY() {
    return y;
  }
  int exchange()  {           //测试同名的局部变量
    int y=5;                   //与成员变量同名的局部变量
    return this.y+y;       //(4)使用this区分成员变量和局部变量
  }
}
 
class TestSuper extends TestThis{
  int y;      //覆盖了父类的同名变量
  int x;
  TestSuper(int newX) {   //子类的构造方法
    super();                   // 调用父类无参构造方法,可以省略
      y=newX;
  }
  /* TestSuper(int newX) { //子类的构造方法
    super(newX);        //测试另外一种方式:调用父类带一个参数的构造方法
     y=newX;
  }*/
  int getY(){    //重写父类同名方法,返回的是子类成员y;否则子类继承父类方法,返回的是父类的同名变量值
    return y;
  }
  int getX() {
    return x;
  }
  int getY1() {
    return super.y;  //使用super操作被隐藏的成员变量
  }
}
public class TestThisSuper{
  public static void main(String args[])
  {
    TestThis this1=new TestThis();
    TestThis this2=new TestThis(99);
     System.out.println("********测试this的使用情况********\n");
    System.out.println("用第一种构造方法时初始的成员变量y值="+this1.getY()+"\n");
    System.out.println("用第二种构造方法时初始的成员变量y值="+this2.getY()+"\n");
    System.out.println("调用方法max(25,12,46)比较三个参数中的最大值="+this1.max(25,12,46)+"\n");
    System.out.println("用第一种构造方法时,调用方法changeY()修改y值="+this1.changeY(66)+"\n");
    System.out.println("用第一种构造方法时,调用方法getY()提取y值="+this1.getY()+"\n");
    System.out.println("用第一种构造方法时,调用方法exchange()用局部变量y叠加5后的y值="+this1.exchange()+"\n");
    TestSuper super2=new TestSuper(20);
    System.out.println("********测试super的使用情况********\n");
    System.out.println("用子类构造方法时,调用方法getY()提取成员变量y值="+super2.getY()+"\n");
    System.out.println("用子类构造方法时,调用方法getX()提取成员变量x值="+super2.getX()+"\n");
    System.out.println("子类中调用父类方法对y值修改后,父类成员变量y值="+super2.changeY(55)+"\n");  //操作的是父类中的同名变量
    System.out.println("子类中,得到子类的成员变量y值="+super2.getY()+"\n");
    System.out.println("子类中,得到父类的成员变量y值="+super2.getY1()+"\n");
  }
}

 

 

标签:Java,构造方法,int,子类,width,面向对象编程,return,父类,夜光
来源: https://blog.csdn.net/weixin_41987706/article/details/91429373

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有