一、访问修饰符
含义:设置访问权限
注意:
* 只能使用 默认的、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修饰类后,就是给类加了一个可以装抽象方法的功能。