面向对象/2024/1/11总结

本文介绍了Java中的接口概念,如何解决单继承限制,以及Object类的重要特性如equals方法的重写、finalize方法和toString方法的使用。还讨论了抽象类和接口选择的优先级和equals方法在比较对象时的作用。
摘要由CSDN通过智能技术生成

1)interface 接口

介绍

interface是定义接口时使用的关键字

语法 : interface 接口名 { }

接口的出现,解决了java中单继承导致的功能变弱问题

接口中只有常量,没有变量,由public static final修饰且可以省略不写

接口中没有构造方法,不能创建对象,但是可以发生多态

一个类只能继承于一个类,但是可以实现多个接口,多个接口之间用逗号分隔

接口和接口之间可以多继承

接口的使用

	public static void main(String[] args) {
		Bullet bullet1 = new Bullet();
		bullet1.fly();
		bullet1.attack();
	}
}

interface Flyable{   //接口:可以飞
	int MIN_SPEED = 0;
	double MAX_SPEED = 7.9;
	void fly();
}

interface Attackable{   //接口:可以造成伤害
	void attack();
}

class Plane implements Flyable{   //飞机实现了可以飞的接口
	public void fly(){
		System.out.println("飞机可以飞~~~");
	}
}

class Kite implements Flyable{   //风筝实现了可以飞的接口
	public void fly(){
		System.out.println("风筝可以飞~~~");
	}
}

class Bullet implements Flyable,Attackable{   //子弹实现了可以飞和可以造成伤害的接口
	public void fly(){
		System.out.println("子弹可以飞~~~");
	}
	public void attack(){
		System.out.println("子弹可以造成伤害~~~");
	}
}

class Ballon implements Flyable{   //气球实现了可以飞的接口
	public void fly(){
		System.out.println("气球可以飞~~~");
	}
}

总结

当抽象类和接口都可以完成某个需求时,优先使用接口

使用接口的目的:保留该子类的类继承关系

2)Object类

Object类是根类  如果一个类没有显示继承 则它继承于Object类
所有的类都直接或间接的继承于Object类  所以Object类中的方法 在其他类中也有

1.equals方法

== : 比较基本类型时,比较的是它们值是否相同
       比较引用类型时,比较的是它们的地址是否相同  
equals方法 : 比较两个对象是否相同  


但Object类中的equals方法默认比较内存地址 所以需要对equals方法进行重写

关于重写equals方法

public static void main(String[] args) {
		Student s1 = new Student(10001, "西撒");
		Student s2 = new Student(10001, "西撒");
	}
	
}

class Student{
	int id;
	String name;
	
	public Student (int id,String name){
		this.id = id;
		this.name = name;
	}
	
	public boolean equals(Object obj){
		//如果id和name都相同 则这组信息表示的是同一个人
		//this是s1 obj是s2
		if(this == obj)  //先比较内存地址 如果地址相同 则直接返回true
			return true;
		if(obj instanceof Student){  //否则,判断obj是否是Student的实例
			Student s = (Student) obj;
			if(this.id == s.id && this.name == s.name)
				return true;
		}
		return false;
	}

关于字符串的比较

	public static void main(String[] args) {
		String name1 = "艾伦耶格尔";
		String name2 = "艾伦耶格尔";
		String name3 = "迪奥布兰度";
		
		System.out.println(name1.equals(name2));  //true
		System.out.println(name1.equals(name3));  //false
	}

2.finalize方法

finalize方法是在垃圾回收时自动调用的

所谓垃圾,就是一个对象在没有任何引用可以找到它时,就会被视为垃圾数据

3.toString方法

toString表示对象的字符串表示形式

toString方法常用来进行字符串的描述

例如

public static void main(String[] args) {
		Customer c1 = new Customer("布加拉提", '男', 28, "意大利", 8848.00);
		Customer c2 = new Customer("乔尼乔斯达", '男', 25, "美国", 10101.50);
		System.out.println(c1.toString());
		System.out.println(c2.toString());
	}
}

class Customer{
	private String name;
	private char sex;
	private int age;
	private String address;
	private double account;
	
	public Customer(String name, char sex, int age, String address,double account) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.address = address;
		this.account = account;
	}

	@Override
	public String toString() {
		return "Customer [name=" + name + ", sex=" + sex + ", age=" + age
				+ ", address=" + address + ", account=" + account + "]";
	}

输出结果为

Customer [name=布加拉提, sex=男, age=28, address=意大利, account=8848.0]
Customer [name=乔尼乔斯达, sex=男, age=25, address=美国, account=10101.5]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值