Java學習 第三章 面向對象(上)

一.對象和類

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)


















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章