天天看點

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)

1.封裝:

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)

注意:預設的是同一個包的所有類都能通路(上面的四個修飾符并不都是包含關系   具體情況具體分析吧);

          protect不同包的子類也能通路(因為他子類哪裡有一個星号),同一個包不是子類也能通路;

2.封裝的普通思想:

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)

例子:

package cn.wang;
/**
 * 測試封裝
 * @author Wang
 *
 */

public class Person0 {
	private String name ;
	private int age;
	private boolean man;
	
	public String getName() {//封裝的基本手段get  和set方法
		return this.name; 
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if(age>=0&&age<=130) {//高内聚的展現
			this.age = age;
		}
		else {
			System.out.println("請輸入正确年齡!不要撒謊哦!");
		}
		
	}

	public boolean isMan() {//對于這個布爾類型的來說要把get改成is
		return man;
	}

	public void setMan(boolean man) {
		this.man = man;
	}
	
}
           
package cn.wang;
/**
 * 測試封裝0,通路Person0的屬性
 * @author Wang
 *
 */
public class TestEncapsulation {
	public static void main(String[] args) {
		
		Person0 per = new Person0();
		per.setName("Wangtong");
		System.out.println(per.getName());
		
		per.setAge(-15);//設個是設定不上的
		System.out.println(per.getAge());//會輸出預設值為0
	}
	
}
//Wangtong
//請輸入正确年齡!不要撒謊哦!
//0
           

注意;想上面類中沒有隻有屬性和set,get方法沒有其他複雜方法我們稱她為javabean;

3.多态:(polymorphism)

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)

4.對象的轉型:

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)

3和4的例子:

package cn.wang;
/**
 * 測試多态與對象的轉型
 * @author Wang
 *
 */

public class TestPoly {
	public static void main(String[] args) {
		Animal a = new Animal();
		animalCry(a);
		
		Animal D = new Dog();//建立對象的時候也可以這樣  b還是狗的對象;編譯器在這裡認為Dog向上轉型 轉為Animal了;
		animalCry(D);//JVM運作的時候才知道D是Dog,但是我們寫代碼的時候都是先通過編譯然後才運作
		//D.seedoor();//這一句他會說The method seedoor() is undefined for the type Animal編譯的時候就過不去;
		
		Dog D2 = (Dog)D; //這個就是向下轉換為強制轉換;
		D2.seedoor();
		
		Cat C = new Cat();//在這裡會實作最後一個要求,
		animalCry(C);//就是父類引用指向子類後用該父類引用調用子類重寫的方法;
	}
	
	static void animalCry(Animal a) {
		a.shout();
	}
}

class Animal{
	public void shout() {
		System.out.println("動物的叫聲/");
	}
}

class Dog extends Animal{//繼承方法重寫都有了
	public void shout() {
		System.out.println("汪汪汪/");
	}
	
	public void seedoor() {
		System.out.println("看門/");
	}
}

class Cat extends Animal{
	public void shout() {
		System.out.println("喵喵喵/");
	}
}
           

5.final

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)

6.數組;

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)

注意:數組就是對象不是可以看成 對象;

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
package cn.DKF.arrays;
/**
 * 數組的測試
 * @author Wang
 *
 */

public class Test01 {
	public static void main(String[] args) {
		int [] arr01;//聲明一個數組   建議這樣寫
		int arr02[];//還可以這樣聲明;
		
		arr01 = new int[10];//給數組配置設定空間
		String[] arr03 = new String[10]; 
		
		int[] arr04 = new int[10];//我們一般都是聲明與給空間寫到一起的;
		
		for(int i=0;i<arr01.length;i++) {//數組的周遊初始化
			arr01[i] = 10 * i;
		}
		
		//arr01[11] = 100;會抛異常  java.lang.ArrayIndexOutOfBoundsException 數組索引越界
		
		for(int i=0;i<arr01.length;i++) {//數組周遊讀取;
			System.out.println(arr01[i]);
		}
		
		User[] arr05 = new User[3];//會在堆中生成arr05數組并有3個空間
		arr05[0] = new User(100,"wangtong");//在這是在堆中建立一個User對象裡面是100,wangtong;然後把他的位址給arr05[0];
		arr05[1] = new User(101,"wangtong1");//同上
		arr05[2] = new User(102,"wangtong2");//同上
		
		for(int i=0; i<arr05.length; i++) {//還是周遊
			System.out.println(arr05[i].getName());
		}
	}
}

class User{
	int id;
	String name;
	
	public User(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	
}
           

7.數組的初始化:

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)

例子:

package cn.DKF.arrays;
/**
 * 數組的三種指派方法
 * @author Wang
 *
 */

public class Test02 {
	public static void main(String[] args) {
		//靜态初始化
		int[] a = {2,3,4};
		
		User[] b = {
					new User(1000,"wangyajie"),
					new User(1001,"lishaung")
		           };
		//預設初始化
		int[] c = new int[3];//預設進行指派和成員變量的預設指派規則一緻,int預設0,boolean預設False,String預設是null;
		//動态初始化
		int[] d = new int[2];
		a[0] = 1;
		a[1] = 2;
		//後兩個都要先動态配置設定空間;
	}

}
           

7.for-each(注意是讀取)

菜雞自學JAVA坎坷路day.7(封裝,多态,對象的轉型,final,數組,for-each)
package cn.DKF.arrays;
/**
 * 
 * 數組的周遊操作與for-each
 * @author wang
 *
 */

public class Test03 {
	public static void main(String[] args) {
		int[] a = new int[3];
		
		for(int i=0; i<a.length; i++) {//周遊初始化;
			a[i] = 10*i;
		}
		
		for(int i=0; i<a.length; i++) {//周遊讀取;
			System.out.println(a[i]);
		}
		
		System.out.println("#################");
		
		for(int temp:a) {//for-each 注意她隻能用于數組和集合的讀取而不能用作初始化;
			System.out.println(temp);
		}
	}
}