面向对象--封装、继承、多态

1. 面向对象的概念

  • 面向对象:封装
    -类内部行为自己控制,别人无法干涉
    本身方法等 自身决定

  • 面向对象:继承
    子类复用父类的描述信息和行为
    父类/基类:哺乳动物类
    子类/派生类:人类

  • 面向对象:多态
    哺乳动物类:人类、马类
    人类和马类 鸣叫行为不一样,称为多态

2.定义类

  • 方法、变量小写开头。 类大写开头
  • 成员变量是:private; 成员方法是:public ; 不要加static
public class Person {
	//成员变量 一般是private
	private int age;
	private String name;
	// 成员方法  一般是public
	//设置年龄
	public void setAge(int value)
	{
		this.age=value;
	}
	
	//设置名字
	public void setName(String value)
	{
		this.name=value;
	}
	
	//读取名字+年龄
	public void sayHello()
	{
		System.out.println("我的名字是"+this.name+",我的年龄是"+this.age);
	}
}

3.对象的创建和调用方法

定义类的变量,指向初始化的对象,调用方法

public class Main {

	public static void main(String[] args) {
		// 定义变量p 指向一个初始化对象
		Person p=new Person();
		//调用成员变量和成员方法
		p.setAge(30);
		p.setName("小伟");
		p.sayHello();
	}

}

4.对象之间是相互独立的

相同类的对象之间 或者不同类的对象之间都是相互独立的

public static void main(String[] args) {
		// 定义变量p 指向一个初始化对象
		Person p=new Person();
		//调用成员变量和成员方法
		p.setAge(30);
		p.setName("小伟");
		p.sayHello();
		
		//定义新对象。p和p1 这两个变量指向的对象互不影响
		Person p1=new Person();
		p1.setAge(33);
		p1.setName("林志颖");
		p1.sayHello();
		
		//重新调用p指向的对象的方法
		p.sayHello();

5.通俗方法讲变量和对象

1个变量只能指向一个对象
如果变量指向对象变了,那么之前所指向对象的关系删除

public class Main {

	public static void main(String[] args) {
		// 定义变量p 指向一个初始化对象
		Person p=new Person();
		//调用成员变量和成员方法
		p.setAge(30);
		p.setName("小伟");
		p.sayHello();
		
		//定义新对象。p和p1 这两个变量指向的对象互不影响
		Person p1=new Person();
		p1.setAge(33);
		p1.setName("林志颖");
		p1.sayHello();
		
		
		// p2 指向 p1变量所指向的对象
		Person p2=p1;
		p2.setAge(66);
		p2.setName("周润发");
		p2.sayHello();
		p1.sayHello();
	}

}

6 给方法传变量

传递给方法的参数变量本身是拷贝。
public class Main {

public static void main(String[] args) {
	// 定义变量p 指向一个初始化对象
	Person xiaowei=new Person();
	//调用成员变量和成员方法
	xiaowei.setAge(30);
	xiaowei.setName("小伟");
	xiaowei.sayHello();
	//调用方法,改变变量的值
	test(xiaowei);
	xiaowei.sayHello();
	
}

// 定义一个方法,注意是要加static 
static void test(Person p)
{
	p=new Person();
	p.setAge(888);
}

}

7成员变量和局部变量

必须初始化,对象初始化为null
NullPointerException --空指针

8 深入理解this

  • Person 类
package com.test;

public class Person {
	
	private int age;
	private String name;
	private int height;
	private String gender;
	
	public void setAge(int age)
	{
		this.age=age;
	}
	
	public int getAge()
	{
		return this.age;
	}
	
	public void setName(String name)
	{
		this.name=name;
	}
	
	public String getName()
	{
		return this.name;
	}
	
	public void setHeight(int height)
	{
		this.height=height;
	}
	
	public int getHeight()
	{
		return this.height;
	}

	public void setGender(String gender)
	{
		this.gender=gender;
	}
	
	public String getGender()
	{
		return this.gender;
	}
	
	
	public void  sayHello()
	{
		System.out.println("my name is "+this.name+",我的年龄是"+this.age+",我的身高是"+this.height+",我的性别是"+this.gender);
	}
	
	public boolean isSamePeople(Person p)
	{
		return this.age==p.age&&this.name.equals(p.name)  
				&& this.height==p.height &&this.gender.equals(p.gender);
	}
}
  • main函数
package com.test;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1=new  Person();
		p1.setAge(18);
		p1.setGender("girl");
		p1.setHeight(175);
		p1.setName("xiaowei");
		p1.sayHello();
		
		
		Person p2=new  Person();
		p2.setAge(18);
		p2.setGender("girl");
		p2.setHeight(175);
		p2.setName("xiaowei");
		p2.sayHello();
		
		
		Person p3=new  Person();
		p3.setAge(38);
		p3.setGender("boy");
		p3.setHeight(159);
		p3.setName("zhangsan");
		p3.sayHello();
		
System.out.println(p1.isSamePeople(p2));
System.out.println(p2.isSamePeople(p3));



	}

}

9 private 和public

类中 成员变量一般用private 成员方法是public
成员变量的值设定或者取得一般用 set 和get public方法

10构造函数

  1. 构造函数 可以不定义,系统默认有一个无参构造函数。
  2. 方法名和类名一致,没有返回值
  3. 构造函数可在类中定义,public Person()
  4. 构造函数可以重载,多个构造函数,参数类型或者个数不一致
  5. 如果有有参构造函数,则类默认的无参构造函数不能用,除非新建无参构造函数
  6. 构造函数一般用来赋初始值
    构造函数:可以用来进行初始化值; get set 可以用来改变值。 不矛盾,可以配合使用
//定义类
public class Person {
	
	private int age;
	private String name;
	
	
	// 定义构造函数,与类名相同,无参数
	public Person()
	{
		System.out.println("定义构造函数");
		
	}
	
	// 定义构造函数1,与类名相同,有1个参数

	public Person(int age)
	{
		System.out.println("定义构造函数1");
		this.age=age;
	}
	
	// 定义构造函数2,与类名相同,有1个参数

		public Person(int age,String name)
		{
			System.out.println("定义构造函数2");
			this.age=age;
			this.name=name;
		}
	
	
	public void setAge(int age)
	{
		this.age=age;
	}
	
	public int getAge()
	{
		return this.age;
	}
	
	public void setName(String name)
	{
		this.name=name;
	}
	
	public String getName()
	{
		return this.name;
	}
	
	
	public void  sayHello()
	{
		System.out.println("my name is "+this.name+",我的年龄是"+this.age);
	}
	
	
}

//定义main函数
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1=new  Person();
		p1.sayHello();
		
		Person p2=new  Person(15);
		p2.sayHello();
		
		
		Person p3=new  Person(15,"zhangsan");
		p3.sayHello();
	
	}

}

11 JavaBean 规范

  1. 如果成员变量希望外界赋值,提供set方法
  2. 如果成员变量希望外界读取,提供get方法
  3. 类必须是公共类,最多只能有1个public类
  4. 必须有一个无参的构造函数
  5. 成员变量private
  6. boolean 类型成员变量 get方法 可以是is

12 对象和对象之间的关系

  • 示例
    Dog 类有性别和姓名
    Person类 有年龄,身高以及Dog类的对象
    Dog
public class Dog {

	private String name;
	private String sex;
	
	// 无参构造函数
	public Dog()
	{
		
	}
	
	//set 和get 成员变量
	public void setName(String name)
	{
		this.name=name;
	}
	
	public String getName()
	{
		return this.name;
	}

	// 利用Source自动生成 成员变量set 和get
	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}
	
	
	public void sayhello()
	{
		System.out.println("i am one dog; my name is "+this.name+",my sex is "+this.sex);
	}
	
}

Person

package com.test;

public class Person {

	// 定义一个无参构造函数
	public Person() {

	}

	// 定义3个普通成员变量 和 1个Dog 类的变量
	private int age;
	private int height;
	private String name;
	private Dog pet;

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getHeight() {
		return height;
	}

	public void setHeight(int height) {
		this.height = height;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	//set和get类的变量
	public void setPet(Dog pet)
	{
		this.pet=pet;
	}

	public Dog getPet() {
		return this.pet;
	}
	
	public void sayhello()
	{
		if(this.pet==null)
			System.out.println("i am sorry");
		
		else
			System.out.println("my name is "+this.name+",我的身高是"+this.height+",我的年龄是"+this.age+
				"我的宠物名字是"+this.pet.getName()+",我的宠物性别是"+this.pet.getSex());
	}

}

Main类

package com.test;

public class Main {

	public static void main(String[] args) {

		// 初始化人,最好是先初始化狗,为了避免空指针
		Person p1=new Person();
		p1.setAge(33);
		p1.setHeight(180);
		p1.sayhello();
		
		//初始化狗 并且赋值
		Dog d1=new Dog();
		d1.setName("旺财");
		d1.setSex("girl");
		p1.setPet(d1);
		d1.sayhello();
		p1.sayhello();
		

	}

}

13 包

  • 作用:
    不同类放在不同包下面,比较好区分
    重名类放在不同的包下面
    包名小写
    包名:公司名反着写:com.rupeng.crm.usr
    类之间互相引用:import com.rupeng.com.*(不推荐)
    import com.rupeng.com.Person(推荐)
    import static 方法,直接调用:
import static java.lang.Math.abs;
public class Main {

	public static void main(String[] args) {

		//abs 直接调用,不用写Math
		int i=abs(-3);
		System.out.println(i);	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值