2017年4月30日 星期日

Java :多載(overloading)與覆寫(overriding)

多載(overloading):
多載的定義是:在同一個類別內,另外定義一個方法名稱相同、但是參數數目和資料型態不同的方法。多載的技巧除了用在方法上之外,建構子也可以使用。

方法的多載:

class Car{
	public void setCar(String s){
		System.out.printf("車號:%s",s);
	}
	public void setCar(int d){
		System.out.printf("油量:%d",d);
	}
	public void setCar(String i,int g){
		System.out.printf("車名:%s 價錢:%d",i,g);
	}
}

public class Sample {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Car c1 = new Car();
		c1.setCar("BMW",2000000);
	}

}
//執行結果: 車名:BMW 價錢:2000000

建構子的多載
介紹建構子的多載之前必須先了解何謂建構子,建構子和方法有點類似,但是建構子是用在當我們透過某個既有的類別建立物件時,會順便自動呼叫並執行建構式的內容。

多載也可以用在建構子上,根據上述的定義,建構子的多載就是可以同時建立多個建構式,但是參數數目和資料型態一定要不同。


class Car{
	private String name;
	private int gas,dollar;

        public Car(String name,int gas){
		
	}
	
	public Car(String name,int gas,int dollar){
		this.name = name;
		this.gas = gas;
		this.dollar = dollar;
	}
	
	public void show(){
		System.out.printf("車名:%s,油量:%d,價錢:%d",name,gas,dollar);
	}
}

public class Sample {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Car c1 = new Car("BMW",2000,1800000);
		c1.show();
	}

}
//執行結果: 車名:BMW,油量:2000,價錢:1800000

覆寫(overriding)
其定義是: 在子類別當中定義另一方法名稱、參數數量和資料型態都完全相同的方法。


class Car{
	
	public void show(){
		System.out.printf("show Car");
	}
}

class RacingCar extends Car{
	public void show(){
		System.out.println("show RacingCar");
	}
}

public class Sample {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		RacingCar c1 = new RacingCar();
		c1.show();
	}

}
//執行結果: show RacingCar

Java : 物件導向三大特性(封裝、繼承、多型)

Java是種物件導向為基礎的程式語言,物件導向有3大特性:封裝、繼承、多型,但是在介紹3大特性以前,必須先談談何謂類別和物件。


類別:
類別可以把它想像成為一張藍圖,藍圖是為了做出我們想要的物件而設計的,裡面會定義好我們所需要的屬性和方法,其中方法又大概可以分為一般的方法、類別方法和建構子。

物件:
物件則是具體的東西,是藉由定義好的類別(藍圖)來建立的。

封裝
物件導向概念中,「封裝」可說是物件狀態的隱藏過程,或指程式實作的隱藏
(implementation hiding)。所謂的封裝是透過統一方法或介面實作來取得那些類別
中不允許被外部直接存取的內部資料,以維謢物件資源的完整性與存取安全。
簡單地說:就是將類別(class)內部的屬性(data)和方法(method)包裝起來。


public class Encapsulation {

 public static void main(String[] args) {
 
  MyAccount account = new MyAccount();
   
  account.setMoney(1000);
   
  System.out.println(“$” + account.getMoney());
  
 }

}

class MyAccount {

 private int money;

 public void setMoney(int money) {
 
  this.money = money;
 
 }

 public int getMoney(){
 
  return money;
 
 }

}
//執行結果: $1000

繼承
繼承是指類別物件的資源可以延伸和重複使用,在程式中可利用 extends 關鍵
字來表達類別的繼承關係,這種延伸類別(extends class ) 的關係也就是 “is a “的
概念。


class Father {

public int money = 1000000;

public void undertaking() {

System.out.println(“父親的事業”);

}

}

class Son extends Father {

}

Public class Extends {

public static void main(String[] args) {

Son son = new Son();

son.undertaking();

System.out.println(“金額:” + son.money);

}

}
/*
執行結果:

父親的事業

金額:1000000
*/

多形
簡單來說就是同名的方法。多個相同名稱的方法,傳入不同的參數,會執行不同的敘述。
要實現java再多型方面的功能,可以使用2種技巧多載(overloading)覆寫(overriding)

關於多型的介紹會在寫下一篇文章。
如果我的觀念有錯的話錯誤歡迎指教!~

2017年4月25日 星期二

Android : 如何取得現在現在位置的經緯度(二)

前一篇文章如何取得現在現在位置的經緯度(一)也是寫如何取得使用者的Location,但是是透過GoogleApi來取得,這篇就來寫一般透過Android FrameWork取得使用者Location經緯度的程式。




2017年4月22日 星期六

Android : 如何取得現在現在位置的經緯度(一)

最近在研究GPS定位爬了很多文章,發現很多人都會用getlastknownlocation的這個方法來取得Location,用模擬器測試時沒問題,但是用實機測試卻取不到值,這個問題困擾我很久,最後發現是因為getlastknownlocation這的方法會使用從上一次讀取經緯度時的經緯度資訊,所以如果找不到值的時候就會出現NULL空值,必須要開啟其他的定位應用程式,例如:google map來定位後,再開啟自己的定位程式,這樣getlastknownlocation才抓的到值。如果硬要用getlastknownlocation還是有解決NULL空值的方法,但是我還找到老外寫的另一種取得Location的方法,下面做介紹。