菜鸡自学JAVA坎坷路day.7(封装,多态,对象的转型,final,数组,for-each)

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);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_38053395/article/details/80306940