JAVA基础-面向对象-day02

面向对象-day02

10.2.2. this关键字

​ 局部变量和成员变量同名,此时在方法中调用变量时根据就近原则,优先使用局部变量,示意图如下。

在这里插入图片描述

可以看出setName方法中两次使用的name,都是直接寻找距离自己最近的形参name,就相当于把参数name的值设置给参数name,根本就没有把参数值设置给成员变量。

​ 使用 this.变量名 的语法,此时访问的就是成员变量,this的其他操作,后面再讲。

在这里插入图片描述

  1. 继承思想

11.1.继承语法
public class 子类名 extends 父类名{
}

注意:Java中类只支持单继承,但是支持多重继承。也就是说一个子类只能有一个直接的父类,父类也可以再有父类。

11.2. 方法覆盖
11.2.1. 方法覆盖操作

当子类存在一个和父类一模一样的方法时,我们就称之为子类覆盖了父类的方法,也称之为重写。那么我们就可以在子类方法体中,重写编写逻辑代码。

方法的调用顺序:

精华:直接拷贝父类中方法的定义粘贴到子类中,再重新编写子类方法体,打完收工!

在这里插入图片描述

11.2.2. super关键字

在子类中的某一个方法中需要去调用父类中被覆盖的方法,此时得使用super关键字。

public class Ostrich extends Bird{
	public void fly() {
		System.out.println("扑扑翅膀,快速奔跑...");
	}
	
	public void say() {
		super.fly();//调用父类被覆盖的方法
		fly();//调用本类中的方法
	}
}
11.3.2. 抽象方法和抽象类

使用abstract修饰的方法,称为抽象方法。

public abstract 返回类型 方法名(参数);

特点:

  • 使用abstract修饰,没有方法体,留给子类去覆盖

  • 抽象方法必须定义在抽象类或接口中

使用abstract修饰的类,成为抽象类。

public abstract class 类名{
}

特点:

  • 抽象类不能创建对象,调用没有方法体的抽象方法没有任何意义

  • 抽象类中可以同时拥有抽象方法和普通方法

  • 抽象类要有子类才有意义,子类必须覆盖父类的抽象方法否则子类也得作为抽象类

11.4. Object类和常用方法

Object本身表示对象的意思,是Java中的根类,要么是一个类的直接父类,要么就是一个类的间接父类。

boolean equals(Object obj):拿当前调用该方法的对象和参数obj做比较

基本数据类型没法调用equals,只能引用类型用

在实际开发中,我们通常是通过比较两个对象中的成员变量舸值是否相等,来判断两个对象是否相同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-abVZLA1I-1597223798579)(E:\内网通下载\笔记\img\image-20200812161646555.png)]

官方建议:每个类都应该覆盖equals方法去比较我们关心的数据,而不是内存地址。

  • String toString():表示把对象中的字段信息转换为字符串格式

打印对象时其实打印的就是对象的toString方法

Person p = new Person();
p.setName("will");
p.setAge(17);
System.out.println(p);
System.out.println(p.toString());

其中:

System.out.println(p);		等价于 System.out.println(p.toString());

打印格式如:

com.JA.Person@15db9742  

官方建议:应该每个类都应该覆盖toString返回我们关心的数据,如:

public class Person {
	private String name;
	private int age;
	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 String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
}

此时打印对象,看到的是该对象的字段信息。

Person [name=will, age=17]

== 符号到底比较的是什么:

  • 比较基本数据类型:比较两个值是否相等

  • 比较对象数据类型:比较两个对象是否是同一块内存空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值