java中的继承

目录

java继承

1.父类

复制代码
public class Person {
    public Double height;
    public String name;
    public char sex;
    public void run(){
        System.out.println("任何人都可以跑");
    }
    public void a(){
        System.out.println("...........");
    }
}

2.子类-------继承父类:子类 extends 父类

复制代码
public class Student extends Person{//继承person
    public void study(){
        System.out.println("学生学习");
    }
}

3.继承的本质

继承的本质就是代码的复用,(子类复用父类的代码)子类可以使用父类已经写好的代码,子类就不需要重新写了,而父类是不能使用子类的代码的

复制代码
public static void main(String[] args) {
    Student student = new Student();
    student.run();

    // 继承的本质就是代码的复用,子类可以使用父类已经写好的代码,子类就不需要重新写了
    Person person = new Person();
    person.study();

    // 父类是不能使用子类的代码的
}

4.java的继承层次是不能互相继承的

5.一个类可以被多个类当成父类,一个子类只能有一个父类(java仅支持单继承):

6. 继承的实现

在 Java 中,继承是通过extends关键字来实现的。子类继承父类的语法如下:

复制代码
class 子类名 extends 父类名 {
    // 子类的属性和方法
}

7. 构造方法的继承

子类可以继承父类的构造方法,但不能直接调用父类的构造方法。如果需要在子类中调用父类的构造方法,可以使用super关键字。例如:

复制代码
public class Student extends Person {
    public Student(String name, double height, char sex) {
        super(name, height, sex); // 调用父类的构造方法
    }
    // 子类的其他方法
}

8. 方法的重写(Override)

子类可以重写父类的方法,以实现自己的特定行为。重写方法时,需要满足以下条件:

  • 方法名和参数列表必须与父类中被重写的方法相同。
  • 子类方法的返回类型必须与父类中被重写的方法的返回类型相同或为其子类。
  • 子类方法的访问修饰符必须大于或等于父类中被重写的方法的访问修饰符。

例如:

复制代码
public class Student extends Person {
    @Override
    public void run() {
        System.out.println("学生可以跑得更快"); // 重写父类的run方法
    }
    // 子类的其他方法
}

9. 访问修饰符与继承

在 Java 中,访问修饰符决定了类、方法和属性的可见性。在继承中,访问修饰符的作用如下:

  • public:可以被任何类访问。
  • protected:可以被同一个包中的类访问,也可以被不同包中的子类访问。
  • default(没有显式指定访问修饰符):可以被同一个包中的类访问。
  • private:只能被当前类访问。

当子类继承父类时,子类可以访问父类中声明为publicprotected的成员,但不能访问声明为private的成员。

10. 继承的限制

虽然继承提供了代码复用的便利,但也有一些限制:

  • Java 不支持多重继承,即一个子类只能有一个父类。
  • 继承可能导致类之间的耦合度增加,使得代码维护变得困难。
  • 过度使用继承可能导致代码的可读性和可维护性下降。

因此,在设计类时,应该合理使用继承,避免不必要的继承层次。

相关推荐
Once_day13 分钟前
C++之《程序员自我修养》读书总结(1)
c语言·开发语言·c++·程序员自我修养
若鱼191916 分钟前
SpringBoot4.0新特性-Observability让生产环境更易于观测
java·spring
觉醒大王24 分钟前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
喜欢喝果茶.32 分钟前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
亓才孓33 分钟前
[Class类的应用]反射的理解
开发语言·python
努力学编程呀(๑•ี_เ•ี๑)33 分钟前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
码农小卡拉42 分钟前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
向上的车轮1 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
Dragon Wu1 小时前
Spring Security Oauth2.1 授权码模式实现前后端分离的方案
java·spring boot·后端·spring cloud·springboot·springcloud
island13141 小时前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络