Java是单继承的,一个类只能继承一个直接父类;Java中的类不支持多继承,但支持多层继承
Object类
- object类是java所有类的祖宗类。我们写的任何一个类,其实都是Object类的子类或子孙类
什么是方法重写?
- 当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写
- 重写后,方法的访问,Java会遵循就近原则(优先子类,而不是父类)
- 代码实例:
A(父类):
package com.zzfeng.extends_override;
public class A {
public void print1() {
System.out.println("A");
}
public void print2(int a, int b) {
System.out.println("AAA");
}
}
B(子类):
package com.zzfeng.extends_override;
public class B extends A {
// 方法重写
public void print1() {
System.out.println("B");
}
// 方法重写
public void print2(int a, int b) {
System.out.println("BBB");
}
}
方法重写的其他注意事项
- 重写小技巧:使用Override注释,它可以指定Java编译器,检查我们方法重写的格式是否正确,代码可读性也会更好
- 子类重写父类方法时,访问权限必须大于或等于父类该方法的权限(publiv>protected>缺省)
- 重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小
- 私有方法、静态方法不能被重写,如果被重写会报错
// 方法重写
@Override
public void print1() {
System.out.println("B");
}
方法重写在开发中的常见应用场景
- 当子类觉得父类的方法不好用,或者不满足自己的需求时,就可以用方法重写
- 子类重写Object类的toString()方法,以便返回对象的内容
- 代码实例:
package com.zzfeng.d12_extends_override;
public class Student {
// 类未继承父类时默认继承Object类
private String name;
private int age;
// 有参构造
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 无参构造器
public Student() {
}
// getter、setter方法
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;
}
// 重写toString
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.zzfeng.d12_extends_override;
public class Test {
public static void main(String[] args) {
B b = new B();
b.print1();
b.print2(1, 2);
System.out.println("-------------");
Student s = new Student("joker", 18);
System.out.println(s);
// 输出时对象s会默认调用Object类的toString()方法,返回字符串形式的地址
// 重写toString()方法后返回想要的内容
}
}