面向对象---抽象和封装
1.對象的使用
類:對同一類具有相同屬性和行為的事物的描述
對象:肉眼能夠看得見摸得著的,能夠被我們具體所描述出來的
對象有屬性和方法(行為)
對象和類的關系:對象是類的具體實現,類是模板用來生產對象
public class Hero {//昵稱,String name="蕭峰";//生命值int health=100;//忠誠度int loyalty=0;//職業String occupation="戰士";String address="鄭州";//輸出英雄信息public void print() {System.out.println("英雄的介紹:\n我的昵稱是"+name+"\t生命值"+health+"\t忠誠度"+loyalty+"\t職業是"+occupation);}public void print03() {System.out.println("雇傭兵的介紹:\n我的昵稱是"+name+"\t生命值"+health+"\t出生地"+address);}//帶返回值的方法//誰調用這個方法,誰用這個方法的返回值public String print01() {name="大喬";return name;}//有參方法 this--這個類的對象public void print02(String name,int loyalty) {this.name=name;this.loyalty=loyalty;}public static void main(String[] args) {Hero hero=new Hero();hero.name="小喬";hero.health=500;hero.loyalty=100;hero.occupation="法師";hero.print();}演示示例:購買人物
import java.util.Scanner;import shili1.Hero; import shili2.Army;public class Test{public static void main(String[] args) {Scanner input=new Scanner(System.in);System.out.println("歡迎您來到本網游!");//1.輸入人物昵稱System.out.println("請輸入要購買人物的昵稱:");String name=input.next();//2.選擇人物類型System.out.print("請選擇要購買的人物類型:(1、英雄2、雇傭兵)");int flag=input.nextInt();switch (flag) {case 1://如果是英雄,選擇英雄職業System.out.print("請選擇英雄的職業:(1、騎士"+"2、法師)");int zhiFlag = input.nextInt();String occupation = null;if (zhiFlag ==1) {occupation ="騎士";}else{occupation="法師";}Hero hero = new Hero();hero.occupation=occupation;hero.name=name;hero.print();hero.loyalty=90;hero.health=90;break;default://如果是雇傭兵,選擇雇傭兵出生地System.out.println("請選擇雇傭兵的出生地:(1、盜賊公社 2、弓箭手營房)");int bthFlag = input.nextInt();String birth = null;if (bthFlag==1) {birth ="盜賊公社";}else{birth="弓箭手營房";}Army army = new Army();army.name=name;army.birth=birth;army.print();break;}} }2.構造函數
-
定義:方法名和類名相同,無返回值
-
作用:用來給對象進行初始化值
-
類在被創建的時候,虛擬機會提供給我們一個無參構造函數。如果你寫了一個構造函數,那么虛擬機提供的無參構造函數會被刪除,所以一定要把無參構造函數寫上
-
構造函數的重載:方法名和類名相同,參數類型和個數不同
/*** 構造方法 * 方法的重載:方法名和類名一樣,參數列表不同(參數的類型和個數不同)*///無參構造方法public Hero(){}public Hero(String name) {this.name=name;}public Hero(String name,int health) {this.name=name;this.health=health;}public static void main(String[] args) {Hero hero=new Hero();String name=hero.print01();hero.print();hero.print02("提莫", 500);hero.print();}3.static修飾符
靜態方法只能調用靜態方法和非靜態屬性
static不能修飾局部變量
static修飾變量是一個類變量(全局變量),優先加載
修飾代碼塊
靜態屬性直接類名.屬性/方法
4.final修飾變量----常量
/*** final的用法*/public class TestSample5 {public static void main(String[] args) {Hero hero1 = new Hero();HeroSex heroSex = new HeroSex();System.out.println("第一個英雄的性別是" + hero1.sex + "。");Hero hero2 = new Hero();hero2.sex = heroSex.SEX_WOMEN;System.out.println("第二個英雄的性別是" + hero2.sex + "。");Hero hero3 = new Hero();hero3.sex = heroSex.SEX_MAN;System.out.println("第三個英雄的性別是" + hero3.sex + "。");} }5.封裝
概念:封裝是將類的狀態信息隱藏在類內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問
封裝的步驟:1.屬性私有化(private)
2.給屬性get,set方法
get方法對象取值,set方法對象賦值?
? ? ? ? 3.封裝的好處
-
隱藏類的實現細節
-
方便地加入存取控制語句
-
增加安全性和可擴展性,限制不合理操作 ?
6.this關鍵字
this通常指當前對象的引用,可以調用當前對象的成員
this.name;//調用當前對象的屬性 this.print();//調用當前對象的方法-
使用this調用成員變量,解決成員變量和局部變量的同名沖突
public void setName(String name){this.name=name; ? //成員變量和局部變量同名,必須使用this } public void setName(String n){n=name; ? //成員變量和局部變量不同名,this可以省略 } -
使用this調用成員方法
public void work(int n){health=health-n;this.print(); ? //this可以省略,直接調用print() } -
使用this調用重載的構造方法,只能在構造方法中使用,必須是構造方法的第一條語句
this只能調用實例變量、實例方法和構造方法
public Army(String name,String birth){this(name,birth); //調用重載的構造方法this.name=name;this.name=birth; }
總結
以上是生活随笔為你收集整理的面向对象---抽象和封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TransUnet官方代码训练自己数据集
- 下一篇: 盘点视频剪辑几个场景和技巧分享