JAVA面向对象三大特性之一:继承(extends)

 

继承(extends)的概述:

现实生活中的继承,孩子继承父辈的财产,孩子可以直接拿父辈的财产来使用,

Java中的继承是指在现有类的基础上定义一个新的类,

现有类称为父类,新的类称为子类,子类会自动拥有父类的可继承的内容.

 

1. 学生类

属性:姓名,年龄

行为:吃饭,睡觉

public class Student {

    private String name;

    private int age;


    public void eat() {

    }
    public void sleep() {
    }
}

2. 医生类

属性:姓名,年龄

行为:吃饭,睡觉

public class Doctor {

    private String name;

    private int age;


    public void eat() {

    }
    public void sleep() {
    }
}

3. 工人类

属性:姓名,年龄

行为:吃饭,睡觉

public class Workder {

    private String name;

    private int age;


    public void eat() {

    }
    public void sleep() {
    }
}

由于学生类、医生类、工人类属性和行为都一样属于人类

在JAVA中可以将人类定义为父类,且都具有子类的所有属性

public class Person {

    String name;

    int age;

    public void eat() {

        System.out.println("吃饭");

    }

    public void sleep() {

        System.out.println("睡觉");
    }
}

 

继承的格式:

class 类名 extends 父类名{}

学生类继承人类:

public class Student extends Person{}

医生类继承人类:

public class Doctor extends Person{}

工人类继承人类:

public class Worker extends Person{}

 

创建完继承类之后

创建学生类对象、医生类对象和工人类对象,都可以直接调用人类中的成员变量和方法

Student s = new Student();

System.out.println(name);

s.eat();                  //输出:吃饭

Doctor d = new Doctor();

d.eat();                  //输出:吃饭

Worker w = new Worker();

w.sleep();                  //输出:睡觉

没有任何成员变量的学生类医生类工人类,继承了父类后,可以直接使用父类中的成员方法和成员变量。

继承注意事项:

1.子类可以具有特有成员方法,创建子类对象,可以直接调用特有方法

2.子类可以重写父类的成员方法,创建子类对象调用成员方法时,使用子类重写的成员方法

3.若父类中有抽象方法,则子类必须重写抽象方法,否则编译错误

4.被private关键词修饰的成员变量和成员方法都不能被子类继承

5.构造方法不能继承

 

抽象(abstract)的概述:

父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。

若父类的方法仅是起到告知子类具有该方法,却不明确写明方法的主体,这就是抽象

Java语法规定,包含抽象方法的类就必须是抽象类。

 

继续使用上述的Person作为抽象类

抽象类格式:

修饰符  abstract  class  类名{}

抽象类成员方法格式:

修饰符  abstract  返回值  方法名(参数);

(注意:抽象方法没有方法体,直接用;结束方法体)

public abstract class Person{
    String name;
    int age;

    public abstract void eat();

    public abstract void sleep();
}

若父类是抽象类,则子类继承时也与普通继承不同

需重写父类中的抽象方法,且写清方法体

public class Student extends Person{

    @Override
    public void eat(){
        System.out.println("学生吃饭");
    }

    @Override
    public void sleep(){
        System.out.println("学生睡觉");
    }
}

1. 抽象类不能创建对象,只能创建其非抽象子类的对象。

2. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

3. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。

好处:

强迫子类重写父类的抽象方法,在不清楚子类具体方法体时,

可以将方法写为抽象方法,让子类继承后自己重写抽象方法

继承中常用this、super关键字

this.成员变量            --     本类的
super.成员变量        --     父类的

假设上述继承关系中

Person类中:
String name = "人";

Student 类中:
String name = "学生";
public void eat(){
       
        System.out.println(this.name + "在吃饭");
        System.out.println(super.name + "在吃饭");
    }

主方法:
new Student().eat(); 
//输出:学生 在吃饭
//       人 在吃饭

注意事项:

super无法调用父类使用private修饰的成员变量或成员方法

猜你喜欢

转载自blog.csdn.net/weixin_42022555/article/details/81393662
今日推荐