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

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

相关推荐
笨鸟飞不快21 分钟前
从单个服务到集群:一次完整的性能排查复盘
java·前端
荣码28 分钟前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
SamDeepThinking32 分钟前
Java微服务练习方式
java·后端·微服务
朦胧之11 小时前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅16 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪17 小时前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly17 小时前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨17 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜17 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
SimonKing1 天前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员