alreadyjava

Java中的继承

2022-07-25  本文已影响0人  小虎哥的技术博客

0、继承使子类获得父类public、protected类型的字段和方法。

一句话:子类继承父类,子类有了父类所有的publicprotected类型的字段和方法。相当于你自己原封不动的把相关代码复制粘贴过来是一样的效果。

// 父类 人
public class People {
    // 姓名
    public String name = "未知";

    // 年龄
    protected int age = 0;

    private String sex = "未知";

    public void eat() {
        System.out.println("吃饭");
    }

    protected void sleep() {
        System.out.println("睡觉");
    }

    private void play(){
        System.out.println("玩");
    }
}
// 子类 学生
public class Student extends People {

}
public class Demo {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.age);
        System.out.println(student.name);
        // System.out.println(student.sex); 报错
        student.eat();
        student.sleep();
        // student.play(); 报错
    }
}

Student extends People子类继承父类。子类Student里面什么代码都没写,但是可以使用agename字段,并且可以调用eat()sleep()方法。
但是无法使用sex字段和play()方法。

1、子类重写(覆盖)父类字段和方法

// 父类 人
public class People {
    // 姓名
    public String name = "人名未知";

    public void eat() {
        System.out.println("人吃饭");
    }
}
// 子类 学生
public class Student extends People {
    public String name = "学生名未知";

    @Override
    public void eat() {
        // super.eat(); 在这可以调用父类的eat()方法
        System.out.println("学生吃饭");
    }

    public void eatOther() {
        // 父类的eat
        super.eat();
        // 子类的eat
        eat();
    }
}
public class Demo {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.name); // 结果:学生名未知
        student.eat(); // 结果:学生吃饭
        student.eatOther(); // 结果:人吃饭 学生吃饭
    }
}

name字段父类有,子类也有,父类字段就被重写(覆盖)了。

eat()方法父类有,子类也有(方法返回值 方法名 参数都一样),父类方法就被重写(覆盖)了。方法重写(覆盖)必须加上@Override注解。

如果一个字段或方法被重写(覆盖)了,那我还想继续使用父类的字段或方法怎么办,可以用super关键字,如super.namesuper.eat()

2、抽象类

abstract修饰的方法是抽象方法(如下eat()方法),一个类如果有抽象方法那么这个类必须是抽象类(abstract修饰的类)。

抽象类可以没有抽象方法,但是有抽象方法的必须是抽象类。抽象类可以有正常方法,如下sleep()方法。

子类如果不是抽象类,那么必须重写(覆盖)父类抽象方法,如下Student类。子类如果是抽象类可以不必重写(覆盖)父类抽象方法,如下Teacher类。

// 父类 人
public abstract class People {

    public abstract void eat();

    public void sleep() {
        System.out.println("人睡觉");
    }
}
// 子类 学生
public class Student extends People {

    // 不重写(覆盖)会报错
    @Override
    public void eat() {
     
    }
}
// 子类 老师
public abstract class Teacher extends People {

}

3、结语

关注微信公众号:小虎哥的技术博客

每天一篇技术文章,没做到自己抽大嘴巴子,各位监督。

上一篇 下一篇

猜你喜欢

热点阅读