0
点赞
收藏
分享

微信扫一扫

java基础 Day14

秦瑟读书 2022-04-18 阅读 128

一、访问修饰符

含义:设置访问权限
注意:
* 只能使用 默认的、public修饰类名
* 使用private、默认的、protected、public修饰属性和方法

分类 ------------本类 ----------- 本包 --------其他包的子类中 ----------其他包
* private ------- ok
* 默认的 ------- ok -------------- ok
* protected ----ok -------------- ok ------------- ok
* public ---------ok -------------- ok ------------- ok -------------------------- ok

二、Object

含义:所有类的超类/基类
理解:如果一个类没有明确继承的父类,默认继承Object
注意:了解以下方法的基本含义
equals():比较的是两个对象的内存地址是否相同(这个功能没啥用,就是给拿来给子类重写的)
getClass():获取到该类的class对象
hashCode():获取对象的hash值(hash值不是内存地址,hash值是内存地址+散列算法获取到的一个数值)
toString():获取对象的字符串表示(一般也不直接用,还是拿来给子类重写的

重写equals:
Student.java

public class Student {
	private String name;
	private char sex;
	private int age;
	private String classId;
	private String id;	
	/**
		省略getter / setter方法和构造方法
	*/
	//对于学生类来说,学号和班级号相等就意味这是同一个学生
	@Override
	public boolean equals(Object obj) {
		if(this == obj){
			return true;
		}
		
		Student stu = (Student)obj;
		
		if(this.id.equals(stu.id) && this.classId.equals(stu.classId)){
			return true;
		}
		return false;
	}
	//重写toString方法,使得输出可读
	@Override
	public String toString() {
		return name + "--" + sex + "--"+ age+"--"+classId + "--" + id;
	}
}

对于学生类来说,学号和班级号相等就意味这是同一个学生,根据这个来重写equalse方法,所以不同的类可以根据需求来重写equals方法

三、String类

String的底层原理:将字符串转换为字符数组去存储

MyString.java

public class MyString {
	//加上final的原因是:一旦一个字符串创建成功,其内容不可发生改变的
	private final char[] value;
	public MyString(String original){//当使用构造方法创建对象时,就已经得到了字符数组
		value = original.toCharArray();
	}
	@Override
	public boolean equals(Object obj) {
		//先判断内存地址
		if(this == obj)
		{
			return true;
		}
			
		//判断长度
		MyString m = (MyString)obj;//强转回MyString后才能调用成员属性value(父类不能调用子类属性)
		
		char[] value1 = this.value;
		char[] value2 =m.value;
		
		if(value1.length == value2.length){
			return true;
		}
		
		//这个判断字符
		for(int i = 0;i<value1.length;i++){
			if(value1[i] != value2[i]){
				return false;
			}
		}
		return true;
	}
	
	@Override
	public String toString() {
		return new String(value);//将字符数组转换为字符串
	}
}

String对象的创建:
String str1 = new String(“qweq”);
String str2 =“qweqe”;
两种创建都可以源于java对于String类的特殊照顾

四、final

final - 最终的
作用:
1.修饰类:该类不能有子类
2.修饰方法:该方法不能被子类重写
3.修饰变量:该变量变成常量
注意:常量存储在常量池中,是强引用,直到项目结束时才会被回收

五、抽象类、抽象方法(abstract)

应用场景:程序设计中该方法应该存在在该类中,但又不好实现,就将该方法设置成抽象方法,交给非抽象的子类去实现
注意:抽象方法必须在抽象类中

1.抽象类不能有构造方法?
抽象类中可以有构造方法

2.抽象类中只能有抽象方法?
不一定,抽象类中可以有抽象方法、构造方法、成员方法、静态方法

3.抽象类中不可以没有抽象方法?
可以,但是毫无意义

4.如果父类是抽象类,则子类必须实现父类的抽象方法?
不一定,子类如果也是抽象类,可以不实现父类的抽象方法

5.可以使用new关键字来创建抽象类对象?
不可以,创建的是匿名内部类的对象

总结:用abstract修饰类后,就是给类加了一个可以装抽象方法的功能。

举报

相关推荐

day14

Day14 IO

Oracle day14

Day14(String类)

day14学习总结

learn java step by step day14

算法打卡Day14

0 条评论