java面向对象练习10 this关键字

/*

  • java关键字之this
  • 1,this可以修饰属性,方法,构造器。
  • 2,当this修饰属性和方法时,this可以理解为当前对象(在方法内)或正在创建的对象(在构造器内)
  • 2.1在类的方法中,我们可以使用“this.属性”或者“this.方法”的方式,调用当前对象属性或方法。
  • 但是通常情况下,都会选择省略“this”。特殊情况下,如果方法的形参与类的属性重名时,必须显示的
  • 使用“this.变量”的方式来表明此变量为属性而非形参。
  • 2.2在类的构造器中时,我们可以使用“this.属性”或者“this.方法”的方式,调用当前正在创建的对象属性或方法。
  • 但是通常情况下,都会选择省略“this”。特殊情况下,如果构造器方法的形参与类的属性重名时,必须显示的
  • 使用“this.变量”的方式来表明此变量为属性而非形参。
  • 3 this修饰构造器
  • 3.1 可以在类的构造器中使用“this(形参列表)”的方式,调用本类中 其他重载的构造器
  • 3.2 “this(形参列表)”必须声明在构造器的首行
  • 3.3 在类的一个构造器中,最多只能声明一个“this(形参列表)”。
  • 3.4 构造器中不能用“this(形参列表)”的方式调用自身,会形成死循环
  • 3.5 如果一个类中声明了n个构造器,则最多有n-1个构造器中使用了“this(形参列表)”。否则会形成循环调用,出现死循环
  • 3.6 构造器调用“this(形参列表)”后依然是创建了一个对象,只是借用了其它构造器的逻辑。
    */
package com.atguigu.contact;

public class Object_This {
       String name;
       int age;
      public Object_This() {
    	  
      }
      public Object_This(int age) {
    	  if(age < 0 || age >150) {
    		  System.out.println("数据非法,重新设置");
    		  return;
    	   }
      	  this.age = age;
      }
      public Object_This(String name) {
  		super();
  		this.name = name;
  	  }
      public Object_This(String name,int age) {
    	  this(age);
    	  this.name = name;   	  
      }
      public void setName(String name) {//形参与属性同名,必须使用this指明哪个是属性
    	  this.name = name;
      }
      public String getName() {
    	  return name;
      }
      public void setAge(int age) {
    	  this.age = age;
      } 
      public int getAge() {
    	  return age;
      } 
      public void getInfo() {
    	  System.out.println(this.name + this.age);//此处this可以省略
      }
      public void test() {
    	  this.getInfo();//this修饰方法,表明调用当前对象的getInfo方法,输出当前对象的属性,此处this可以省略
      }
      
      public static void main(String[] args) {
		 Object_This o = new Object_This("KK",180);
		 o.getInfo();
		 Object_This o1 = new Object_This("KK",21);
		 o1.getInfo();
		 
		 Boy b = new Boy();
		 b.setName("Jerray");
		 Girl g = new Girl();
		 Girl g1 = new Girl();
		 g.setAge(21);
		 g1.setAge(25);
		 g.setName("Tom");
		 g.marry(b);
		 g.marry(new Boy());
		 System.out.println(g.compare(g1));
		 System.out.println(g1.compare(g));
		 System.out.println(g.compare(g));
	}
	
}

//this练习

class Boy{
	private String name;
	private int age;
	
	public Boy() {
		
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void marry(Girl girl) {
		System.out.println(name + " marry " + girl.getName());
	    shout();
	}
	public void shout() {
		System.out.println("I LOVE YOU!!!");
	}
}

class Girl{
	private String name;
	private int age;
	public Girl() {
		
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void marry(Boy boy) {
		System.out.println(name + " marry " + boy.getName());
		boy.marry(this);//此处使用this说明调用的是当前对象,如果使用new Girl()作为参数会指向新对象。
	}
	public int compare(Girl girl) {//对象比较是对对象属性的比较,返回int值
		//当返回值为正数,当前对象大,返回值为负数,当前对象小,返回值为0,则当前对象与形参对象一样大小
		if(this.age > girl.age) {
			return 1;
		}else if(this.age < girl.age){
			return -1;
		}else {
			return 0;
		}		
		//或者 return this.age - girl.age;
	}
}
发布了47 篇原创文章 · 获赞 1 · 访问量 1068

猜你喜欢

转载自blog.csdn.net/wisdomcodeinside/article/details/104065820