1.封裝:

注意:預設的是同一個包的所有類都能通路(上面的四個修飾符并不都是包含關系 具體情況具體分析吧);
protect不同包的子類也能通路(因為他子類哪裡有一個星号),同一個包不是子類也能通路;
2.封裝的普通思想:
例子:
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)
4.對象的轉型:
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
6.數組;
注意:數組就是對象不是可以看成 對象;
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.數組的初始化:
例子:
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(注意是讀取)
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);
}
}
}