【黑馬程序員】java中--------------封裝、繼承、多態

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------



封裝


類:類就是用來描述事物的屬性(成員變量)和行爲(成員方法)。

對象:對象就是這類事物,實實在在存在的個體。

類與對象的關係:通過new這類事物就可以將這類事物封裝爲對象,通過對象的引用就可以調用類中的成員變量和成員方法

成員變量與局部變量:

A.成員變量:作用於整個類;內存位置是在堆內存中,因爲對象的存在而存在

B.具部變量:作用於函數中,或者語句中;且存在於棧內存中

匿名對象:當對象的方法值只調用一次時,可以用匿名對象來完成,這樣比較簡化

可以將匿名對象作爲實際參數進行傳遞

面向對象(封裝)

封裝:就是指隱藏隨性的屬性和實現細節,對外僅僅提供公共的訪問方式。

好處:將變化隔離;便於使用;提高重用性;提高安全性

原則:將不需要對外的內容隱藏起 來;

  把屬性都隱藏,對外提供公共方法。

Private; set  ();    get  ();

構造函數:對象一建立就會調用與之對應的構造函數;作用是用於給對象進行初始化。

本身具有默認構造函數:類名(){}

構造代碼塊:給對象進行初始化,對象一建立就運行,而且優先於構造函數執行

 

 

 

區別:構造代碼塊是給所有對象進行統一初始化;可以將不同對象共性的內容抽取該區域。

  而構造函數是給對應的對象初始化

 

Class person{
private String name;
Private int age;
Person(String name,int  age){
Name=name;
  Person(String name,int  age){
  Name=name;
  Age=age;
  }
  {
  System.out.println(“哭..........................”);
  }
}
Class personDemo{
  Mian(){
  Person  p=new person();
  }
}



 (this: 代表本類對象,代表它所在函數所屬對象的引用。

效果:看上去是用於區分局部變量和成員變量同名情況

構造函數間的調用:this(  );函數調用函數,只能在構造函數的第一行

注意:一般函數是不能調用構造函數,

 

/static 關鍵字(只能修飾成員方法和成員變量);4.無需建立對象:直接類名調用

特點:1.隨着類的加載而加載(週期過長);2. 優先於對象存在;3. 被所以對象所共享

內存位置:隨着類加載存於方法區域中;隨着類的消失而消失

一般變量:存在於堆內存中;隨着對象的垃圾回收而消失

注意:靜態方法只能訪問靜態成員

非靜態方法可以訪問靜態和非靜態

2;靜態方法中不能有this    super 關鍵字。以爲靜態優先於對象存在

Day6  main函數(作爲程序的入口)

靜態變量的應用:當對象出現共享數據時可以定義

 

靜態函數:當功能內部沒有服務到靜態數據(對象的特有數據)

  那麼該功能方法可以定義成靜態

例子:如工具類

指定路徑查找:set  classpath=.;c:\myclass   點是當前路徑,+指定路徑

幫助文檔製作:   

/**

@auther   :作者

@version  :版本號

方法上面@param   arr  參數接收一個int類型的數組

@return    會返回一個該數組中的最大值

*/

編譯時,指定文檔的存放位置:javadoc  -d  (E:\myclass)或者當前maclass  -auther  -version  類名.java

注意:構造函數的權限隨着類的改變而改變

 

靜態代碼塊:static {靜態代碼塊中的執行語句}

特點:隨着類的加載而執行,只執行一次。   用於給類進行初始化

構造代碼塊:{  執行語句}是給所有對象初始化,隨着對象的建立而初始化

 

類一加載:靜態代碼塊  >構造代碼塊   >Static靜態方法

 


繼承:day7

1,提高代碼的複用性  2,讓類與類之間存在了關係,有了這個關係纔有了多態的特性

例子;經理類

class Emplouyee{
	private String name;
	private String id;
	private double pay;
	Emplouyee(String name,String id,double pay){
		this.name=name;
		this.id=id;
		this.pay=pay;
	}
	public void work();
}
class Manager extends Employee{
	private int bonus;
	Manager(String name,String id,double pay,int bonus){
		super(name,id,pay);
		this.bonus=bonus;
	}
	public void work(){
		System.out.println("經理開始工作:");
	}
}
class Pro extends Employee{
	Pro(String name,String id,double pay){
		super(name,id,pay);
	}
	public void work(){
		System.out.println("普通員工開始工作:");
	}
}
class JiChengDemo{
	public static void main(String[] args){
		Manager m=new Manager();
		m.work();
	}
}


抽象類:abstract 

例子:模板設計模式   ;類與抽象類是繼承關係

定義:在定義功能時,功能的一部分是確定的,但有一部分是不確定的,而卻定的部分在使用不確定的部分,那麼這時就將不    確定的部分暴露出去,有該類的子類去完成。

需求:獲取一程序運行的時間。

abstract class GetTime{
	public final void getTime(){
		long start=System.currentTimeMillis();
		runCode();
		long end=System.currentTimeMillis();
		System.out.println("毫秒值:"+(end-start));
	}
	public abstract void runCode();
}
class SubTime extends GetTime{
	public void runCode(){
		for(int x=0;x<4000;x++){
			System.out.print(x);
		}
	}
}
class GetTimeDemo{
	public static void main(String[] args){
		SubTime st=new SubTime();
		st.getTime();
	}
}


 

接口:interface

  類與接口是實現關係(implements

特點:接口中常見定義;常量,抽象方法。

  接口中的成員都有固定的修飾符

Public static final  --

Public abstract  --

接口可以被多實現,

接口與接口直接可以多繼承,但其中的方法一定是一模一樣的,否則在調用方法 時不明確

 

 

多態:

 

體現:父類的引用指向直接的子類對象,父類的引用頁可以接受直接的子類對象

前提:必須是類與類之間有關係,要麼繼承,要麼實現,另外;還存在覆蓋

多態的好處:多態的出現大大的提供程序的擴展性、

 

多態的應用:animal  的例子和主板示例       instanceof  判斷所屬類型

還有就是object類,equals()方法  toString()方法

abstract class Animal{
	public abstract void eat();
}
class cat extends Animal{
	public void eat(){
		System.out.println("吃魚!!");
	}
	public void catchMouse(){
		System.out.println("抓老鼠");			
	}
}
class Dog extends Animal{
	public void eat(){
		System.out.println("吃屎!!");
	}
	public void kanjia(){
		System.out.println("看萬秀雲");
	}
}
class Pig extends Animal{
	public void eat(){
		System.out.println("吃飼料!!");
	}
	public void gongDi(){
		System.out.println("翻地");
	}
}
class duotai1{
	public static void main(String[] args){
		//Animal a=new cat();//類型提升,向上轉型
		//a.eat();	
		//cat c=(cat)a;//強轉父類引用,父轉子,向下轉型
		function(new cat());
		//c.catchMouse();
		function(new Dog());
		function(new Pig());
	}
	public static void function(Animal a){
		a.eat();
		if(a instanceof cat){
		   cat c=(cat)a;
		   c.catchMouse();
		}
		else if(a instanceof Dog){
			Dog c=(Dog)a;
			c.kanjia();
		}
		else if(a instanceof Pig){
			Pig c=(Pig)a;
			c.gongDi();
		}
	}
	 
}


Day9 :  內部類

規則:1,內部類可以直接訪問外部類中的成員(包括私有成員);;原因是內部類有外部類的引用:類名.this

 

2,外部類要訪問內部類,必須建立內部類對象

內部類在成員位置上:可以private  ,static修飾

在局部位置的內部類:如果局部的變量被final  y=8;修飾,局部內部類的方法纔可以訪問

 

public class Demo1{
	public static void main(String[] args){
		Outer o=new Outer();
		
		o.function();
		
	}
}
class Outer{
	private int x=3;
	public void function(){
		final int y=8;	
		 class Inner1{
			public void show(){
				
				  
			//內部類訪問外部類成員,帶外部類引用this
				System.out.println("內部類1:"+Outer.this.x);
				System.out.println("內部類1:"+y);
			}
			
		}
		 Inner1 i=new Inner1();
			i.show();
	}
}

在外部類中定義一個匿名內部類:前提 是他有一個父類(包括繼承extends或 實現implements

 


---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------













---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------



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