一,常用关键字
1)super , this 关键字
我们可以在子类的方法或构造器中。通过使用"super . 属性“或"super • 方法"的方式,显式的调用
父类中声明的属性或方法。但是,通常情况下,我们习惯省略"super.
特殊情況:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须使用super.的方式
使用"super •属性”的方式,表明调用的是父类中声明的属性。
特殊情况:当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用"super •方法“的方式,表明调用的是父类中被重写的方法。
super调用构造器
我们可以在子类的构造器中显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器"super(形参列表)“的使用,必须声明在子类构造器的首行!
我们在类的构造器中,针对于"this(形参列表)“或"super(形参列表)“只能二选一,不能同时出现
在构造器的首行,没有明确的声明"this(形参列表)“或"super(形参列表)“,则默认调用的是父类中空参的构造:
在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)",调用父类中的构造器
this是在当前类使用表明当前属性或方法
2)final 最终的
>final 可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
>使用 final 关键字声明类,就是把类定义定义为最终类,不能被继承,或者用于修饰方法,该方法不能被子类重写
修饰类
final class 类名 {//类体}
修饰方法
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
final修饰变量就称为一个常量
3)static 静态的
static可以用来修饰:属性、方法、代码块、内部类
3.1 , 使用static修饰属性:静态变量(或类变量)
private static String name;
属性,按是否使用static修饰,又分为:静态属性 vS 非静态属性(实例变量)
实例变量:我们创建了类的多个对象,每个对家都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对家中同样的属性值的修改。
静态变量:我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时,会导致其他对家调用此静态变量时,是修改过了的。
静态变量随着类的加载而加载。可以通过“类•静态变量"的方式进行调用
3.2 ,使用static修饰方法:静态方法
public static String show(){
return name +"\t" + "性别是:" + sex;
}
随着类的加载而加载,可以通过"类.静态方法"的方式进行调用
静态方法中,只能调用静态的方法或属性
非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
在静态的方法内,不能使用this关键字super关键字
static final 用来修饰属性就是一个全局常量 要大写
private static final String name = "张三";
4) extends继承
Penguin类继承Animal类
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
public class Animal {
private String name;
private int id;
public Animal(String myName, int myid) {
//初始化属性值
}
public void eat() { //吃东西方法的具体实现 }
public void sleep() { //睡觉方法的具体实现 }
}
public class Penguin extends Animal{
}
5) implements 实现
使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
public interface A {
public void eat();
public void sleep();
}
public interface B {
public void show();
}
public class C implements A,B {
}
6) abstract 抽象的
修饰类 , 修饰方法称为抽象类 , 抽象方法
具体用法参考抽象笔记
7)interface 接口
public interface NameOfInterface
{
//任何类型 final, static 字段
//抽象方法
}
8)instanceof 运算符用于多态向下转型
public static void show(Animal a) {
a.eat();
// 类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat)a;
c.work();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog)a;
c.work();
}
}
二,重写 tostring , equals 方法
9)重写tostring 方法
9.1 ,当我们输出一个对象的引用是,实际上就是调用当前对象的tostring方法我们自定义的类可以重写tostring方法返回对象的实体内容。否则会输出地址。
快捷键:Alt + Insert
@Override
public String toString() {
return "Study{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
10)重写equals 方法
>只适用于引用数据类型
Object类中定义的equals方法作用跟 "==" 的作用是相同的都是比较两个对象的地址值是否相同,如果要判断两个对象的实体内容是否相同则要重写 equals 方法
快捷键:Alt + Insert
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Study study = (Study) o;
return Objects.equals(name, study.name) && Objects.equals(sex, study.sex);
}