Java中的继承(语法)

1 继承的关键字

        记住extends!!!!

2 继承的格式

继承一定二个类之间的关系。

        格式:

public class 子类 extends 父类{

}

        注意!!!!

在Java中只支持单继承。一个类只能有一个直接父类。

        每个人只能有一个爹!!! 类也一样

class A{
}

public class B extends A{
}

3 继承之后的好处

子类可以使用父类的属性和方法。

        子类可以使用父类所有的属性和方法。

        只不过,当属性使用private修饰时,表示私有。

        父类中声明的私有属性和方法,可以继承,但是不能使用。

4 继承关系的实现方式是什么

在Java中继承关系的实现方式: 是以为每一个子类实例配置一个其父类的实例。并使用super这个引用,从子类实例中指向父类实例。

B b = new B();  //new B(); 是要创建一个B类的实例。在创建B类实例时,发现B有父类A。就会再创建一个A类的实例。

内存展示如图:

Java中的继承(语法)_第1张图片

5 创建两个实例(父类和子类的实例)时是先后顺序 

根据上面的图。我们发现。创建子类实例时,也一定会创建一个父类实例。

实例的创建过程。一定要调用类的构造方法。

父类与子类之间的实例的创建顺序:先创建好父类实例,再创建好子类实例。

父类与子类构造方法的调用顺序:先调用子类构造方法,在子类构造方法的第一行调用父类构造方法。

示例代码:

class A {
    private int i;
    public A() {
        System.out.println("A类默认构造方法!");
    }
    public void print(){
        System.out.println("A.print()");
    }
}

public class B extends A{
    public B() {
        System.out.println("B类默认构造方法!");
    }
    public static void main(String[] args) {
        B b = new B();
        b.print();//调用父类的方法。
    }
}

输出结构:

A类默认构造方法!

B类默认构造方法!

A.print()

6 this 和super

this是一个在实例内部指向其自身实例的引用。

super是一个在子类实例内部指向其父类实例的引用。

(1) this

就三种用法

        1 this() 在构造方法内部引用自身其他构造方法的格式。

        2 this.属性 调用自身属性的格式

        3 this.方法() 调用自身方法的格式

(2) super

就三种用法

        1 super() 在子类构造方法的第一行,调用父类构造方法的格式。

        2 super.属性 调用父类属性的格式

        3 super.方法() 调用父类方法的格式。一般这个格式会在方法重写中出现。

示例代码:

class A {
    private int i;

    public A() {
        System.out.println("A类默认构造方法!");
    }
    public A(int i){
        this.i = i;
        System.out.println("A类有参构造方法!");
    }

    public void print(){
        System.out.println("A.print()");
    }
}


public class B extends A{
    public B() {
        System.out.println("B类默认构造方法!");
    }
    public B(int i){
        super(i);//向父类构造方法传参
        System.out.println("B类有参构造方法!");
    }

    public static void main(String[] args) {
        B b = new B();
        b.print();//调用父类的方法。

	   B b1 = new B(10);

    }
}

7 方法重写

方法重写:在父类与子类有相同的方法。这二个方法就叫方法重写。

class A {
    public void print(){
        System.out.println("A.print()");
    }
}

public class B extends A{
    public void print(){
        System.out.println("B.print()");
    }
    //在子类(B)中重写了父类(A)继承过来的print方法。
}

当子类调用被重写的方法时,就近原则:先找到哪一个方法就调用哪一个方法

(1) 检查方法是否重写的注解

注解:当@Override报红就表示重写代码有问题

@Override
public void print(){
    super.print();//调用父类的print()方法。
    System.out.println("B.print()");
}

(2) 方法重载

方法重载:同类同名不同参

例如:println()这个方法

同类:同一个类中可以使用的方法。 不是同一个类中声明的方法。(子类从父类继承的方法就可以重载)

8 练习

1. 编写父类(Person)

        有属性:姓名;

        有方法:喊到(){

        sout("大家好!我是XXXX");

}

2. 编写子类(Student)

        有属性:学号和姓名;

        有方法:喊到(){

        sout("大家好!我是XXXX");

        sout("我的学号是XXX!");

}

class Person {
    private String name;
    public Person(){
    }
    public Person(String name) {
        this.name = name;
    }
    public void call(){
        System.out.println("大家好!我是"+this.name);
    }
}

public class Student extends Person{
    private int sid;
    public Student() {
    }
    public Student(String name, int sid) {
        super(name);
        this.sid = sid;
    }
    @Override
    public void call(){
        super.call();
        System.out.println("大家好!我是"+this.getSid());
    }
}

public static void main(String[] args) {
    Student s1 = new Student();
    s1.setSid(1);
    s1.setName("张三");
    s1.call();
}

你可能感兴趣的:(java,jvm,开发语言)