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

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

相关推荐
3***1610几秒前
【JavaEE】Spring Boot 项目创建
java·spring boot·java-ee
6***v4174 分钟前
VScode 开发 Springboot 程序
java·spring boot·后端
t***31658 分钟前
SpringBoot中自定义Starter
java·spring boot·后端
橘子编程10 分钟前
经典排序算法全解析
java·算法·排序算法
z***33512 分钟前
SpringBoot获取bean的几种方式
java·spring boot·后端
wefg123 分钟前
【C++】IO流
开发语言·c++
aloha_78924 分钟前
联易融测开面试准备
java·python·面试·单元测试
s***469825 分钟前
【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)
java·spring boot·后端
"菠萝"30 分钟前
C#知识学习-020(访问关键字)
开发语言·学习·c#
动亦定1 小时前
页面导出大量数据导致响应超时解决方案
java·mysql