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

	}

}

类名作为形式参数其实需要的是该类的对象

类名作为返回值其实返回的是一个对象

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