Java 类的继承机制
在Java中继承是面向对象编程不可以忽略的机制,使用extends来表示继承关系——class A extends class B (表示A为子类,B为父类) ,而在一个类创建后总继承一个父类,如果我们没有定义,则是默认继承object类。就相当于儿子继承父母的财产,是默认的。。。
Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
当一个类继承另外的一个类,子类继承extend父类的非private属性和方法,并且子类可以有自己的属性和方法,而在子类中要调用父类的非私有的方法和属性,可以使用super和this关键字调用。**this是当前类的调用**this.方法()| this.属性()。
接下来细说:
1。对于属性来说
@子类可以通过super.属性进行调用非私有(private)的属性
@对于父类的包访问权限成员变量,如果子类和父类在同一个包下,则子类能够继承;否则,子类不能够继承
@对于子类可以继承的父类成员变量,如果子类中属性与父类中的属性重名时,在子类中会自动隐藏父类的重名属性,而如果要调用父类的那个属性,得使用super.属性相当于super代表父类的存储空间标识进行调用。
2。对于方法来说
@子类能够调用父类的非私有(private)的方法,
@对于父类的包访问权限成员方法,如果子类和父类在同一个包下,则子类能够继承,否则,子类不能够继承。
@而对于方法同属性一样道理,子类和父类有同名的方法,叫方法覆盖,包括方法名和参数列表都相同 super.方法()调用父类方法。
构造方法不能覆盖
而对于一个子类和父类的运行顺序:
有继承关系的类,构造时先调用父类的构造器,然后调用子类的构造方法,如果有代码块,静态代码块优先执行,非静态代码块,先父后子,子类代码块后与父类的构造器,当代码块和构造方法出现时 先运行代码块
如:
1.先父类后子类例子
class Person {
public Person() {
System.out.println(“execute Person()”);
}
}
class Student extends Person {
public Student() {
System.out.println(“execute Student() “);
}
}
class PostGraduate extends Student {
public PostGraduate() {
System.out.println(“execute PostGraduate()”);
}
}
publicclass TestInherit {
publicstaticvoid main(String[] args) {
new PostGraduate();
}
}
A. execute Person()
execute Student()
execute PostGraduate()
B. execute PostGraduate()
C. execute PostGraduate()
execute Student()
execute Person()
D. 没有结果输出
答案: A
- 子类父类静态代码块、子父构造器….例子
class HelloA {
public HelloA( ) {
System.out.println(“HelloA”);
}
{System.out.println(“I’m A class”);
}
static {
System.out.println(“static A”);
}
}
publicclass HelloB extends HelloA {
public HelloB( ) {
System.out.println(“HelloB”);
}
{System.out.println(“I’m B class”);
}
static {
System.out.println(“static B”);
}
publicstaticvoid main(String[] args) {
new HelloB();
}
}
答案
static A
static B
I’m A class
HelloA
I’m B class
HelloB
3父类对象不能调用子类例子
class Base {
publicvoid method(){
System.out.print (“Base method”);
}
}
class Child extends Base{
publicvoid methodB(){
System.out.print (“Child methodB”);
}
}
class Sample {
publicstaticvoid main(String[] args) {
Base base= new Child();
base.methodB();
}
}
A Base method
B. Child method
C. Base method
Child method
D. 编译错误
答案: D
最后说一下Java中的继承机制好处多多 提高了代码的重用性,让类和类之间产生了关系, 为多态创造了条件。
大家一起学习进步啊啊啊啊