java基本数据类型与封装类 示例_Java零基础系列教程10Java抽象与封装
配套視頻教程
軟件出現的目的
用計算機的語言描述現實世界
用計算機解決現實世界的問題
為什么使用面向對象
世界由對象組成
面向對象的思想 描述 面向對象的世界 符合人類思維習慣
從現實中抽象出類分三步:找出它的種類
找出它的屬性
找出它的行為
用面向對象描述世界
第一步:發現類
class Dog {
}
根據“對象”抽象出“類”
第二步:發現類的屬性
狗類共有的特征:品種
年齡
昵稱
健康情況
跟主人的親密度
… …class Dog {
String name = "旺財"; // 昵稱
int health = 100; // 健康值
int love = 0; // 親密度
String strain = "拉布拉多犬"; // 品種
}只放和業務相關的屬性
第三步:發現類的方法
狗類共有的行為:跑
吠
輸出自己的信息
… …class Dog {
String name = "旺財"; // 昵稱
int health = 100; // 健康值
int love = 0; // 親密度
String strain = "拉布拉多犬"; // 品種
/* 輸出狗的信息 */
public void print() {
// 輸出狗信息的代碼
}
}只放和業務相關的方法
使用類圖描述類
實踐
實現領養寵物功能
編寫寵物類Dog和Penguin
創建寵物對象,輸入領養的寵物信息并輸出
對象初始化Penguin pgn = new Penguin();
pgn.name = "qq";
pgn.sex = "Q仔";能否在創建對象的同時就完成賦值?
使用構造方法:
Penguin pgn1 = new Penguin();class Penguin {
// 屬性
/* 無參構造方法 */
public Penguin() {
name = "qq";
love = 20;
sex = "Q仔";
System.out.println("執行構造方法");
}
}
構造方法
系統提供默認無參構造方法public Penguin() {
}
自定義構造方法public Penguin () {
name = "qq";
love = 20;
sex = "Q仔";
}public Penguin (String name,int health,int love,String sex ) {
this.name = name;
this.health = health;
this.love = love;
this.sex = sex;
}系統不再提供默認無參構造方法
this關鍵字是對一個對象的默認引用,這里用以區分同名成員變量
方法重載
System.out.println(45);
System.out.println(true);
System.out.println("狗在玩耍!");
調用重載方法pgn = new Penguin();
pgn.print();
pgn = new Penguin("美美", 80, 20, "Q仔");
pgn.print();
一個例子class Penguin {
String name = null; //昵稱
int health = 0; // 健康值
String sex = null; // 性別
public void Penguin() {
health=10;
sex="雄";
System.out.println("執行構造方法");
}
public void print() {
System.out.println("企鵝的名字是" + name + ",健康值是"
+ health + ",性別是" + sex);
}
}Penguin pgn3= new Penguin();
pgn3.print();
找出下面代碼的問題class Dog {
private String name = "旺財"; // 昵稱
private int health = 100; // 健康值
private int love = 0; // 親密度
public void play(int n) {
int localv;
health = health - n;
System.out.println(name+" "+ localv +" "+health+" "+love);
}
public static void main(String[] args) {
Dog d=new Dog();
d.play(5);
}
}
static靜態成員
一個例子 統計對象被創建出來的個數class Person
{
public String name;
public int age;
static public long all_count;
public Person(){
all_count++;
}
public Person( String name , int age ){
all_count++;
this.name = name;
this.age = age;
}
// 統計人數的函數
public long getCount(){
return all_count;
}
// 應該具備找同齡人的功能
public boolean isSameAge( Person p1 ){
return this.age == p1.age;
}
}
class Demo9
{
public static void main(String[] args)
{
Person p1 = new Person( "jame" , 34 );
Person p2 = new Person( "lucy" , 34 );
Person p3 = new Person( "lili" , 34 );
Person p4 = new Person();
System.out.println( p1.getCount() + " " + p2.getCount() + " " + p3.getCount() );
System.out.println( p1.isSameAge( p2 ) );
System.out.println( p1.isSameAge( p3 ) );
}
}
4:static特點
1 隨著類的加載而加載,靜態會隨著類的加載而加載,隨著類的消失而消失。說明它的生命周期很長。2 優先于對象存在。—>靜態是先存在,對象是后存在。
3 被所有實例(對象)所共享。
4 可以直接被類名調用
使用static定義方法
用類名調用: Person.print();靜態方法只能訪問靜態屬性,不能訪問實例屬性
找錯誤class Dog {
private String name = "旺財"; // 昵稱
private int health = 100; // 健康值
private int love = 0; // 親密度
public void play(int n) {
static int localv=5;
health = health - n;
System.out.println(name+" "+localv+" "+health+" "+love);
}
public static void main(String[] args) {
Dog d=new Dog();
d.play(5);
}
}
封裝
Dog d = new Dog();
d.health = -1000;
屬性隨意訪問,不合理的賦值
封裝的概念
封裝:將類的某些信息隱藏在類內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問
封裝的好處
1.隱藏類的實現細節
2.只能通過規定方法訪問數據
3.方便加入控制語句
4.方便修改實現
封裝的步驟
class Dog {
private String name = "旺財"; // 昵稱
private int health = 100; // 健康值
private int love = 0; // 親密度
private String strain = "拉布拉多犬"; // 品種
public int getHealth() {
return health;
}
public void setHealth (int health) {
if (health > 100 || health < 0) {
this.health = 40;
System.out.println("健康值應該在0和100之間,默認值是40");
} else
this.health = health;
}
// 其它getter/setter方法
}
this
用類名定義一個變量(對象,實例)的時候,定義的只是一個引用,外面可以通過這個引用來訪問這個類里面的屬性和方法。
那么類里面是夠也應該有一個引用來訪問自己的屬性和方法呢?
JAVA提供了一個很好的東西,就是 this 對象,它可以在類里面來引用這個類的屬性和方法。
先來個簡單的例子:public class ThisDemo {
String name="Mick";
public void print(String name){
System.out.println("類中的屬性 name="+this.name);
System.out.println("局部傳參的屬性="+name);
}
public static void main(String[] args) {
ThisDemo tt=new ThisDemo();
tt.print("Orson");
}
}
關于返回類自身的引用,《Thinking in Java》有個很經典的例子。
通過this 這個關鍵字返回自身這個對象然后在一條語句里面實現多次的操作public class ThisDemo {
int number;
ThisDemo increment(){
number++;
return this;
}
private void print(){
System.out.println("number="+number);
}
public static void main(String[] args) {
ThisDemo tt=new ThisDemo();
tt.increment().increment().increment().print();
}
}
一個類中定義兩個構造函數,在一個構造函數中通過 this 這個引用來調用另一個構造函數public class ThisDemo {
String name;
int age;
public ThisDemo (){
this.age=21;
}
public ThisDemo(String name){
this();
this.name="Mick";
}
private void print(){
System.out.println("最終名字="+this.name);
System.out.println("最終的年齡="+this.age);
}
public static void main(String[] args) {
ThisDemo tt=new ThisDemo("zhangsan"); //隨便傳進去的參數
tt.print();
}
}
練習
創建Dog類
編寫Test類
package com.company;
/**
* Created by ttc on 2017/12/28.
*/
//private ,default, protected,public
public class Dog {
private String name = "旺財"; // 昵稱
private int health = 100; // 健康值0---100 private私有的
private int love = 0; // 親密度
private int type;//類型:1狗2企鵝
private int kind;//品種
public String toString()
{
String strKind = "";
if(kind == 1)
{
strKind = "拉布拉多";
}
else if(kind == 2)
{
strKind = "雪納瑞";
}
String str = "寵物的自白,我的名字叫"
+name+"健康值是"+health+"和主人的親密度是"+love+"我是一只"+strKind;
return str;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getKind() {
return kind;
}
public void setKind(int kind) {
this.kind = kind;
}
}package com.company;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("歡迎來到寵物店");
System.out.println("請輸入寵物名字");
String name = scanner.next();
System.out.println("請輸入寵物類型:1狗,2企鵝");
int type = scanner.nextInt();
if(type == 1)
{
Dog d = new Dog();
System.out.println("請輸入品種,1聰明的拉布拉多,2酷酷的雪納瑞");
int kind = scanner.nextInt();
d.setKind(kind);
d.setName(name);
System.out.println(d);
}
else
{
//new 企鵝();
}
}
}
創建Penguin類
編寫Test類
總結
以上是生活随笔為你收集整理的java基本数据类型与封装类 示例_Java零基础系列教程10Java抽象与封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java uppercase方法_jav
- 下一篇: java 过滤文件名_Java File