Java面向對象-類和對象

面向對象的思想

面向對象思想:強調對象,由對象去調用功能

  • 1-是一種符合我們思考習慣的思想
  • 2-將複雜變簡單
  • 3-將我們從執行者變成指揮者

如何表示事物:

  •  1-屬性
    
  •  2-行爲
    
  • 例如-學生

  • Java語言最基本的單位是類:一組相關的屬性和行爲的集合

  • 對象:就是該事物的具體體現

  • 舉例:

  •  類-學生
    
  •  對象-學生
    

類的簡單定義

  • 類的定義:屬性和方法
  • 類:
  •  成員變量:和普通變量的定義是一樣的,只是位置不同(類中,方法外),不需要給初始化
    
  •  成員方法:和普通方法的定義是一樣的,只是要去掉static關鍵字
    
package com.object1;
/*
 * 	手機類的定義:
 * 		變量:品牌、價格、顏色
 * 		方法:短信、電話
 */

public class Phone {
	//變量
	String brand;
	int price;
	String color;
	
	//方法
	public void call(String name) {
		System.out.println("給"+name+"打電話");
	}
	public void mess(String name) {
		System.out.println("給"+name+"發信息");
	}
	
}

package com.object1;

public class PhoneDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Phone p=new Phone();
		
		
		//變量賦值
		p.brand="錘子";
		p.color="黑色";
		p.price=2999;
		//輸出變量
		System.out.println("品牌:"+p.brand);
		System.out.println("顏色:"+p.color);
		System.out.println("價格:"+p.price);
		
		
		
		//調用方法
		p.call("wang");
		p.mess("li");
		
		
		Phone p2=new Phone();
		
		
		//變量賦值
		p2.brand="小米";
		p2.color="白色";
		p2.price=1999;
		//輸出變量
		System.out.println("品牌:"+p2.brand);
		System.out.println("顏色:"+p2.color);
		System.out.println("價格:"+p2.price);
		
		
		
		//調用方法
		p2.call("jiang");
		p2.mess("shi");
		
		
		//在創建新對象
		Phone p3=p;
		p3.brand="OPPO";
		p3.color="紫色";
		p3.price=3999;
		
		//此時p的值p3是一致的(兩個引用指向同一個對象)
		System.out.println("---------------------");
		System.out.println("品牌:"+p.brand);
		System.out.println("顏色:"+p.color);
		System.out.println("價格:"+p.price);
		
		System.out.println("品牌:"+p3.brand);
		System.out.println("顏色:"+p3.color);
		System.out.println("價格:"+p3.price);
		
		
	}

}

成員變量和局部變量

成員變量和局部變量:

  •  A-	成員變量:類中,方法外
    
  •  	局部變量:方法中或方法聲明上(形式參數)
    
  •  B-  在內存中的位置不同:
    
  •              成員變量:堆內存
    
  •              局部變量:棧內存
    
  •  C-  生命週期不同
    
  •  	成員變量:隨獨享的創建存在,隨對象的消失而消失
    
  •      局部變量:隨着方法的調用存在,隨着方法調用完畢而消失
    
  •  D-  初始化
    
  •  	成員變量:有默認值
    
  •  	局部變量:沒有默認值,必須先定義再使用
    

private修飾

package com.object3;
/*
 * 	通過對象直接訪問成員變量,會存在數據安全問題
 * 	使用private不讓外界直接訪問成員變量
 * 	private修飾符:可以修飾成員變量和成員方法,被修飾後只能在本類中使用
 * 	
 * 	針對private修飾的成員變量,我們會相應的提供getXXX()和setXXX()方法用於獲取和設置成員變量的值,
 *                                                                      方法用public修飾
 */

public class Student {
		//屬性-姓名、年齡---
		//方法-學習、喫飯
		
		//成員變量
		String name;
		private int age;
		
		public void setName(String s) {
			name=s;
			
		}
		public String getName() {
			return name;
		}
		
		public void setAge(int a) {
			if (a<0||a>200) {
				System.out.println("年齡設置有誤");
			}else {
				age=a;
			}
			
			
		}
		public int getAge() {
			return age;
		}
		
		//方法
		public void  show() {
			System.out.println("name:"+name+";"+"age:"+age);
		}
		public void study() {
			System.out.println("認真學習");
		}
		
		public void eat() {
			System.out.println("好好喫飯");
		}
}
package com.object3;


public class StudentDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student s=new Student();
		s.show();
		
		s.setAge(28);
		s.setName("wang");
		s.show();
		
		

	}

}

封裝-面向對象的三大特徵之一(繼承和多態)

封裝的原則:把不需要對外提供的內容隱藏
把屬性隱藏,提供公共方法對其訪問
private修飾的成員變量,我們會相應的提供getXXX()和setXXX()方法用於
獲取和設置成員變量的值,方法用public修飾

this 關鍵字

如果局部變量和成員變量同名,在局部使用時,採用就近原則

  • this關鍵字(解決局部變量隱藏成員變量的問題):代表所在類的對象引用
  • 方法被哪個對象調用,this就代表那個對象
package com.object4;
public class Student {
	
	//成員變量
	String name;
	private int age;
	
	public void setName(String name) {
		//name=name;
		this.name=name;
		
	}
	public String getName() {
		return name;
	}
	
	public void setAge(int age) {
			//age=age;
			this.age=age;
		
		
		
	}
	public int getAge() {
		return age;
	}
	
	//方法
	public void  show() {
		System.out.println("name:"+name+";"+"age:"+age);
	}
}

構造方法

給對象的數據進行初始化
構造方法的格式:
方法名和類名相同
沒有返回值類型,連void都不能寫
沒有具體的返回值

構造方法的調用
通過new關鍵字調用
格式爲:

  •  類名  對象名 = new 構造方法(.....);
    

構造方法的注意:

  •  1-如果我們沒有構造方法,那麼系統會默認提供一個無參的構造方法
    
  •  2-如果我們給出了構造方法,系統將不再提供無參的構造方法,如果想使用必須自己提供
    
  •  3-構造方法也是可以重載的
    

成員變量賦值:

  •  1-setXX方法
    
  •  2-帶參構造方法
    
package com.object5;

public class Student {
	
	private String name;
	private int age;
	
	public Student() {
		System.out.println("這是無參構造方法");
	}
	
	public Student(String name) {
		System.out.println("這是帶一個參數的構造方法");
		this.name = name;
	}
	
	public Student(String name,int age) {
		System.out.println("這是帶兩個參數的構造方法");
		this.name = name;
		this.age = age;
	}

	
	public void show() {
		System.out.println(name+"---"+age);
	}
	
}

一個完整的類的書寫方式如下:

package com.object6;

public class Student {
	
	//成員變量
	private String name;
	private int age;
	
	//構造方法
	public Student() {
		System.out.println("無參構造方法");
		
	}
	public Student(String name,int age) {
		System.out.println("有參構造方法");
		this.name = name;
		this.age = age;
		
		
	}
	
	//成員方法-get和set方法
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	public int getAge() {
		return age;
	}

}

package com.object6;

public class StudentDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//無參方法進行賦值
		Student s = new Student();
		s.setName("wang");
		s.setAge(28);
		System.out.println(s.getName()+"---"+s.getAge());
		
		//另一種構造方法進行賦值
		Student s1 =new Student("tong",27);
		System.out.println(s1.getName()+"---"+s1.getAge());
		

	}

}

類名作爲形式參數其實需要的是該類的對象

類名作爲返回值其實返回的是一個對象

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