Java 是单继承的,Java中的类不支持多继承,但是支持多层继承。
Object类是所有类的父类。
Java不支持多类继承:
Java支持多层继承:
反证法:
Object类:
Object类是java所有类的祖宗类,我们写的任意一个类,其实都是Object类的子类或子孙类。
A是Object的子类。
B类继承了A类,B跟Object类的子孙类。B跟Object类也是脱不了关系的。
Object类是任何类的祖宗类。我们创建的任何类都是直接或者间接Object类。
那么,我们可以调Object类里的方法的。
方法重写:
当子类觉得父类中的某个方法不好用,或者无法满足自己的需求的时候,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这个就称为方法重写。
注意:
重写后,方法的方法,Java会遵循就近原则。
A类:
package cn.ensource.d12_extends_override;public class A {public void print1() {System.out.println("1111");}public void print2(int a, int b) {System.out.println("2222");}
}
B类:
package cn.ensource.d12_extends_override;public class B extends A{// 方法重写public void print1() {System.out.println("6666");}public void print2(int a, int b) {System.out.println("9999");}
}
Test类:
package cn.ensource.d12_extends_override;public class Test {public static void main(String[] args) {// 目标:认识方法重写,掌握方法重写的应用场景B b = new B();b.print1();b.print2(1, 2);}
}
1)
加注解更安全,可读性也比较好,明了知道这是一个Override,方法重写。
2)修饰符要大于等于,如果小于就报错。
3)返回值类型必须一样,或者范围更小。
4)私有方法和静态方法不能被重写。
我们实际开发中都是:申明不变、重新实现。
方法重写在开发中的常见应用场景:
子类重写Object类的toString方法,以便返回对象的内容。
Student类会继承Object类的toString方法的。
小细节:我们打印对象的时候,默认是调用toString方法的。
在Student类中重写toString方法。
返回结果是:
返回结果就是Student 对象的内容了。有个就近原则。
我们再看这个:
运行结果:
说明:ArrayList类中把toString类进行了重写。
我们学着去查找是怎么重写的,我们看到ArrayList是继承了AbstractList(抽象类),父类又去集成AbstractCollection类,在这个抽象集合类中有重写toString方法。
这段代码的意思还是好懂的,Iterator是一个迭代器。
StringBuilder:字符串构造器
小技巧:
自动生成:
方法重写的概念:
子类写了一个方法名称,形参列表与父类某个方法一样的方法,去覆盖父类的该方法。
申明不变,重新实现。