Java基礎-OOP特性之封裝、繼承、多態、抽象

全文純手打,碼字不易,且碼且珍惜~數組

--------------------------------------------OOP封裝--------------------------------------------安全

//封裝一個類:用來管理普通人的特性和行爲dom

//一、類的概念:人類在認識客觀世界時,發現某些事物具備共同特性,共同結構,共同行爲。ide

//  爲了方便,咱們就將它們集合起來,並抽象出一個概念類管理它們,這個概念就是類。模塊化

//二、類的組成:標準類由:實例變量、構造器、設定器、訪問器和功能方法五個部分組成測試

//三、類的使用:先構造對象(new+構造器),再經過對象的方法來完成業務(對象名。方法名)this

class Person{spa

  //人的屬性(域、字段、實例變量、成員變量)設計

  private String name;//姓名orm

  private boolean sex;//ture爲男,false爲女

  private Date birthday;//生日

  //構造器(一、方法名和類名相同 二、沒有返回值)

  public Person(){

  }

  public Person(String name,boolean sex,Date birthday){

    this.name=name;

    this.sex=sex;

    this.birthday=birthday;

  }

  //設定器:用來爲對象設置或改變屬性的值

  public void setName(String name){

    this.name=name;

  }

  public void setSex(boolean sex){

    this.sex=sex;

  }

  public void setBirthday(Date birthday){

    this.birthday=birthday;

  }

  //訪問器:用來獲取對象的屬性值

  public String getName(){

    return name;

  }

  public boolean getSex(){

    return sex;

  }

  public Date getBirthday(){

    return birthday;

  }

  //功能方法:爲了完成業務而設計的方法

  //返回運算結果,實現簡單的加法運算

  public int add(int x,int y){

    return x+y;

  }

  //返回輸出信息,重寫了父類的方法,這個方法是默認且自動調用的

  public String toString(){

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

    String str=sdf.format(birthday);

    return "姓名:"+name+"\t性別"+(sex?"男":"女")+"\t生日"+str;

  }

}

//變量的概念:計算機內存中的一個存儲單元,它的值能夠隨着程序的運行發生改變

//數據類型:基本類型(存儲數據自己)、引用類型(存儲指向對象的地址)

//Java Application 用來完成業務的類

public class PersonTest{

  public static void main(String[] args){

    //局部變量:方法或語句塊中定義的變量

    String name="劉德華";

    boolean sex=true;

    int age=20;

    //對象變量p1 p2

    Person p1=null;

    p1=new Person();

    person p2=new Person();

    //實現業務:加法運算

    int a=100;

    int b=200;

    int re=p1.add(a,b);

    System.out.println(a+"+"+b+"="+re);

    //實現業務:修改屬性

    p1.setName(name);

    p1.setSex(sex);

    p1.setBirthday(new Date());

    System.out.println(p1);

    //如下現實對繼承類Student的代碼的測試

    Student stu=new Student();

    re=stu.add(50,100);

    System.out.println(re);

  }

}

 

--------------------------------------------OOP繼承--------------------------------------------

//學生是一種普通人,學生有普通人派生而來,成爲一種特殊的普通人

//從學生身上能夠看到普通人的全部特性,也能夠看到只屬於學生不屬於普通人的特性

//使用繼承,讓子類在編寫時的效率更高了,由於子類與父類分共性不用寫了

//使用繼承,讓父類分代碼極大地提升了重用性

public class Student extends Person{

  //子類的個性

  private String school;

  private int score;

  //子類的構造器

  public Student(){

  }

  public Student(String name,boolean sex,Date birthday,String school,int score){

    super(name,sex,birthday);//藉助父類的構造器

    this.school=school;

    this.score=score;

  }

  //設定器、訪問器代碼略過

  //功能方法:

  //重寫(覆蓋)父類的方法add(),大部分狀況下方法頭不變

  //爲何要重寫?由於現有的業務父類完成的不夠好,達不到咱們的業務要求。

  public int add(int x,int y){//此行是方法頭

    //業務要求輸出:下面這行信息,父類的add方法不行,因此調用子類來運算和輸出

    System.out.println("程序調用了Student類(子類)去完成加法運算");

    return x+y;

  }

}

 

--------------------------------------------OOP多態--------------------------------------------

//經典題型:不一樣圖形計算面積

//什麼是多態:同一類的對象   接受相同的信息   作出不一樣的反應

//抽象的平面圖形類,裏面含有抽象方法area();抽象類不能被實例化,但它的子類能夠。

abstract class Shape{

  private String type;

  //構造器

  public Shape(){}

  public Shape(String type){

    this.type=type;

  }

  //設定器、訪問器代碼略過

  //功能方法:

  //求平面圖形的面積:因爲不知道求什麼圖形,從而面積沒法具體實現;因此使用抽象方法

  public abstract double area();

  //重寫父類toString()方法,來知足如今的業務需求

  @Override

  public String toString(){

    return "圖形是:"+type;

  }

}//shape類結束

 

//子類-圓,圓是平面圖形之一

class Circle extends Shape{

  //子類的個性

  private double r;

  //圓的構造器

  public Circle(String type,double r){

    super(type);

    this.r=r;

  }

  //設定器、訪問器代碼略過

  //功能方法:

  //能夠經過重寫父類代碼,來知足新的業務需求

  @Override

  public double area(){

    return Math.PI*Math.pow(r,2);

  }

  @Override

  public String toString(){

    return super.toString+"\t 它的半徑是:"+r+" 它的面積是"+this.area();

  }

}//Circle類結束

 

//子類-矩形

class Rectangle extends Shape{

  //個性

  private int length;

  private int wide;

  //構造器

  public Rectangle(String type,int length,int wide){

    super(type);

    this.length=length;

    this.wide=wide;

  }

  //設定器、訪問器代碼略過

  //功能方法:

  public double area(){

    return length*wide;

  }

  public String toString(){

    return super.toString+",長度爲:"+length+",寬度爲:"+wide+",面積爲"+this.area();

  }

}//Rectangle類結束

//Java Application 業務測試類、業務實現類、體現多態的類;

public class ShapeTest{

  public static void main(String[] args){

    //第一種方式:簡單的多態

    Shape s1=new Circle("圓",5.5);

    Shape s2=new Rectangle("矩形",12,30);

    s1.area();//簡單多態

    s2.area();//簡單多態

    //第二種方式:多個圖形,指定大小

    Circle c1=new Circle("圓",4.5);

    Circle c1=new Circle("圓",5.5);

    Rectangle r1=new Rectangle("矩形",12,30);

    Rectangle r1=new Rectangle("矩形",22,35);

    Shape[] s={c1,c2,r1,r2};

    for(Shape sp:s){

      System.out.println(sp);//多態

    }

    //擴展,動態綁定

    //動態綁定的前提:

    //一、多個子類來源於同一個父類

    //二、子類重寫了父類的方法

    //三、父類的對象變量指向了不一樣的子類對象

    //四、父類的對象變量調用了子類重寫後的方法

    int i=(int)(s.length*Math.random());

    for(Shape sp:s){

      System.out.println(s[i].toString);//動態取得圖形

    }

    //第三種方式:隨機產生隨機個隨機圖形,顯示出來,並計算它們的總面積

    int n=(int)(10*Math.random())+1;//隨機個數

    s=new Shape[n];//存放n個圖形的數組

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

      s[i]=randShape();//隨機產出圖形,並放進數組裏

    }

    double areas=totalAreas(s);//求總面積

    System.out.println("以上全部圖形的總面積是:"+areas);

  }

  public static Shape randShape(){

    int n=(int)(2*Math.random());//隨機取值0或1

    Shape sp=null;

    swith(n){

      case 0: 

        sp=new("圓",Math.round(100*Math.random()+1)/10.0;//隨機半徑,保留隨機數一位小數

        break;

      case 1:

        sp=new("矩形",Math.random()*20+1,Math.random()*50+1);//隨機長和寬

        break;

      default:

        sp=null;

    }

    return sp;

  }

  public static double totalAreas(Shape[] s){//計算總面積

    double sum=0;

    for(Shape sp:s){

      System.out.println(sp);

      sum+=sp.area();

    }

    return sum;

  }

}//ShapeTest類結束

//要習慣將程序(功能、代碼)模塊化

//OOP四大特性:封裝、繼承、多態、抽象

//OOP的核心:封裝一個類,把數據抽象出來,再把方法抽象出來,構成一個總體

//封裝:爲了提升安全性、重用性

//繼承:爲了提升重用性、子類生成的效率

//多態:爲了實現統一管理(統一性)、高效性

//抽象:爲了提升效率、簡化業務邏輯

相關文章
相關標籤/搜索