一.對象和類
1.對象和類的定義
對象可以看成是靜態屬性(成員變量)和動態屬性(方法)的封裝體
類是用來創建同一類型對象的“模板”,在一個類中定義了該類對象所應具有的成員變量以及方法
2.對象和類是分不開的,必須先有類 纔有對象
成員變量+方法=類 --new-> 對象
類是靜態的概念,對象是new出來的,位於堆內存。同一個類的每個對象有不同的成員變量存儲空間,同一類的每個對象共享該類的方法。
類的每個成員變量在不同的對象中都有不同的值,而方法只有一份,執行的時候才佔用內存
約定俗成的命名規則:
類名的首字母大寫
變量名和方法名的首字母小寫
運用駝峯標識
二.構造方法
構造方法是定義在Java類中的一個用來初始化對象的函數,與類同盟切沒有返回值(void也不可以),當沒有指定構造函數時,編譯器爲類自動添加形如 類名(){} 的構造函數,若用戶有定義構造方法,系統則不自動添加。
public class Person{
int id;
int age=20;
//下面就是自定義的構造方法
Person(int _id,int _age){
id=_id;
age=_age;
}
public static void main(String args[]){
Person p1=new Person(1,22);
}
}
使用 new +構造方法 創建一個新的對象
三.方法的重載(overload)
方法的重載指一個類中可以定義有相同名字、但參數不同的多個方法。調用時,根據不同的參數列表選擇對應的方法。(方法名一樣,參數一樣,但返回值不一樣,則不是重載)
與普通方法一樣,構造方法也可以重載。
int max(int a,int b,int c)
int max (int a,int b)
四.this 關鍵字
在類的方法定義中使用的this關鍵字代表使用該方法的對象的引用
當必須指出當前使用方法的對象是誰時要使用this
有時使用this可以處理方法中成員變量和參數重名的情況
this 可以看着是一個變量,它的值是當期對象的引用
例
public class Leaf{
int i=0;
Leaf(int i){ this.i=i;}
Leaf increament(){
i++;
return this;
}
void print(){System.out.println("i="+i);}
public static void main(String args[]){
Leaf leaf=new Leaf(100);
leaf.increament().increament().print();
}
}
執行結果:i=102
五.static 關鍵字
在類中用static 聲明的成員變量是靜態成員變量,它爲該類的公用變量,在第一次使用時初始化,對於該類的所有對象來說static成員變量只有一份。
用static聲明的方法爲靜態方法,在調用該方法時,不會將對象的引用傳遞給它,所以在static方法中不可訪問非static的成員。
可以通過對象應用或類名(不需要實例化)訪問靜態成員
六.類的繼承
Java中使用extends關鍵字實現類的繼承機制,語法爲<modifier> class <name> [extends <superclass>]
通過繼承,子類自動擁有了基類(superclass)的所有成員(成員變量和方法)
Java 只支持單繼承,不允許多繼承(一個子類只能有一個基類,一個基類可以派生出多個子類)
七.訪問控制
Java 權限修飾符 public protedted private 置於類的成員定義前,用來限定其它對象對該類對象成員的訪問權限
對應class的權限修飾只可以用public 和default
八.方法的重寫
在子類中可以根據需要對從基類中繼承來的方法進行重寫。重寫方法必須和被重寫方法具有相同方法名稱、參數列表和返回類型,重寫方法不能使用比被重寫方法更嚴格的訪問權限
class Person{
private int age;
private String name;
public void setAge(int _age){
age=_age;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public String getName(){
return name;
}
public String info(){
return "Name="+name+"Age="+age;
}
}
class Student extends Person{
private String sex="male";
public void setSex(String _sex){
sex=_sex;
}
public String getSex(){
return sex;
}
// 下面這個方法就是對父類方法的重寫
public String info(){
return "Name="+getName()+"Age="+getAge()+"sex="+sex;
}
}
public class OverWrite {
public static void main(String agrs[]){
Student s=new Student();
Person p=new Person();
p.setAge(18);
p.setName("Amy");
s.setSex("Female");
System.out.println(p.info());
System.out.println(s.info());
s.setAge(88);
System.out.println(p.info());
System.out.println(s.info());
}
}
九.super 關鍵字
在Java類中使用super調用父類
繼承中的構造方法
1.子類的構造的過程中必須調用其基類的構造方法
2.子類可以在自己的構造方法中使用super(argument _list)調用基類的構造方法
使用this(argument_list)調用本類的另外的構造方法
如果調用super,必須寫在子類構造方法的第一行
3.如果子類的構造方法中沒有顯示地調用基類構造方法,則系統默認調用基類無參數的構造方法
4.如果子類構造方法中既沒有顯示調用基類構造方法,而基類中又沒有無參的構造方法,則編譯出錯
class FatherClass{
public int value;
public void f(){
value=100;
System.out.println("FatherClass.value="+value);
}
}
class childClass extends FatherClass{
public int value;
public void f(){
// 下面這句調用的是父類的
super.f();
value=200;
System.out.println("ChildClass.value="+value);
System.out.println(value);
System.out.println("FatherClas.value="+super.value);
}
}
public class TestSuper {
public static void main(String args[]){
childClass c=new childClass();
c.f();
}
}
十.Object 類
Object 類是所有Java類的根基類
如果在類的聲明中未使用extend是關鍵字指明其基類,而默認基類爲Object類
Object類中定義有public String toString()方法,其返回值是String類型,在進行String與其它類型數據的連接
操作時(如:System.out.println("info"+person)) 將自動調用該對象類的toString()方法
Object類中定義有public boolean equals(Object obj)方法
十一.對象轉型(casting)
一個基類的引用類型變量可以指向其子類的對象
一個基類的引用不可以訪問其子類對象新增加的成員(屬性和方法)
可以使用引用變量 instanceof類名 來判斷該引用型變量所指向的對象是否屬於該類或該類的子類
子類的對象可以當作基類的對象來使用稱作向上轉型(upcasting),反之成爲i向下轉型(downcasting)