java零基础7--面向对象的编程(3)

this关键字

1.什么是this?

this是一个关键字,代表当前对象,指向自身。

例子:

public class thistext
{
	public static void main (String[] args){
		customer c1 = new customer ("张三");
		customer c2 = new customer ("李四");
		c1.shopping();//this是c1
		c2.shopping();//this是c2
	}
}

class customer
{
	String name;
	public customer (){}
	public customer (String s){
		name = s;
	}

	public void shopping (){
		//这里的this是当前对象
		//c1调用shoppingthis就是c1,c2同理
		//这里的name应该是this.name,当c1调用时,就是c1,c2调用时就是c2,这里的this可以省略
		System.out.println(name+"正在购物");
	}
}

2.this的内存图

(下图来源于动力节点杜老师的课程)
下图可以直观地说明this所保存的是当前对象的地址
在这里插入图片描述

3.this什么时候不可以省略

this在大多数情况下可以省略的,this不能省略时的作用就是区分局部变量和实例变量

class student
{
	private int no;
	private String name;
	public student (){}
	public student (int i,String s){
		no = i;
		name = s;
	}

	//这里用到了封装,这样写可以增强代码可读性
	public void setNo(int no ){
		//no = no ;根据就近原则,这两个no都是局部变量no,和实例变量没欢喜
		//修改
		this.no = no;//这个this.的作用是区分局部变量和实例变量
	}
	public int getNo(){
		return no;
	}
	public void setName(String name){
		this.name = name;//这里同理,若不加this会报错
	}
	public String getName(){
		return name;
	}
}

4.this()

this():通过当前的构造方法,去调用本类的另一个构造方法,实现了代码的复用
注意:
1.this()只能出现在构造方法的第一行

例子:

class date
{
	private int year;
	private int month;
	private int day;
	//调用有参的构造方法,日期是固定的
	public date (){
		this (1977,1,1);

        //相当于实现了
        /*year = 1970;
		month = 1;
		day = 1;*/
	}

	//有参
	public date (int year , int month , int day){
		this.year = year;
		this.month = month;
		this.day = day;
	}

继承

1.什么是继承

继承可以达到代码复用的效果,定义一个子类,去继承父类,该子类有父类所有的属性和方法并且可以对其作出修改。

2.继承的语法

实现继承的关键字:extends
例子:

//父类
class account
{
	private String name;
	private double balance;
	public void setName (String name){
		this.name = name;
	}
	public String getName (){
		return name;
	}
	public void setBalance (double balance){
		this.balance = balance;
	}
	public double getBalance (){
		return balance; 
	}
}

//子类
class creditAccount extends account
{
	private double credit;
	public void setCredit(double credit){
		this.credit = credit;
	}
	public double getCredit (){
		return credit;
	}
}

父类中的代码子类中也会有,使用继承,大大增强了代码的复用性。

3.方法覆盖

案例:

子类继承父类后,可以通过方法重载机制,对继承过来的需要修改的方法进行覆盖

class animal
{
	public void move (){
		System.out.println("动物在移动");
	}

	public void sing (int i){
		System.out.println("animal sing");
	}
}

class brid extends animal
{
	//子类继承父类之后,有一些行为可能需要改进
	//对move方法进行重写,最好将父类中的代码复制过来在重写,这样可以防止出错
	//方法覆盖,就是把继承来的方法覆盖掉了,这里覆盖了move方法
	public void move (){
		System.out.println("鸟儿在飞翔");
	}

	//此处构成了方法重载而不是方法覆盖,因为参数不同
	public void sing (){
		System.out.println("brid sing");
	}
}

class cat extends animal 
{
	public void move (){
		System.out.println("猫在走猫步");
	}
}

4.方法覆盖时的返回值问题

class animal
{
	public double sum (int a,int b){
		return a+b;
	}
}
//报错,无法覆盖
//对于返回值类型是基本数据类型,必须一致
//对于返回值类似是引用数据类型,返回值可以向下转型但不能向上转型
class cat extends animal
{
	public int sum (int a,int b){
		return a+b;
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值