JAVA 继承

前言

继承是面向对象编程中的一项基本概念,它允许一个类(子类或派生类)使用另一个类(父类或基类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在不改变父类的情况下添加新的属性和方法,或者修改父类的行为。

在继承关系中,父类通常包含一些通用的属性和方法,而子类则通过继承这些特性来获得共享的行为。这有助于提高代码的可重用性、可扩展性和组织性。

在Java中,使用extends关键字实现继承,子类通过继承可以获得父类的非私有成员变量和方法,子类的构造方法可以调用父类的构造方法,使用super()关键字。

子类的继承性

子类和父类在同一个包中的继承性

如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,继承的成员变量或方法的访问权限保持不变。

例子

代码

java 复制代码
// 在同一包中的父类
class Animal {
    public String publicField = "公共字段";
    protected String protectedField = "受保护字段";
    String defaultField = "默认字段";
    private String privateField = "私有字段";

    public void publicMethod() {
        System.out.println("公共方法");
    }

    protected void protectedMethod() {
        System.out.println("受保护方法");
    }

    void defaultMethod() {
        System.out.println("默认方法");
    }

    private void privateMethod() {
        System.out.println("私有方法");
    }
}

// 在同一包中的子类
class Dog extends Animal {
    // 子类自然地继承了父类的成员变量
    void accessFields() {
        System.out.println(publicField);      // 可以访问父类的公共字段
        System.out.println(protectedField);   // 可以访问父类的受保护字段
        System.out.println(defaultField);      // 可以访问父类的默认字段
        // System.out.println(privateField);   // 无法访问父类的私有字段
    }

    // 子类自然地继承了父类的方法
    void accessMethods() {
        publicMethod();                        // 可以调用父类的公共方法
        protectedMethod();                     // 可以调用父类的受保护方法
        defaultMethod();                       // 可以调用父类的默认方法
        // privateMethod();                    // 无法调用父类的私有方法
    }
}

public class Test {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.accessFields();   // 调用子类方法,访问继承的成员变量
        myDog.accessMethods();  // 调用子类方法,访问继承的方法
    }
}

运行结果

子类和父类不在一个包中的继承性

如果子类和父类不在同一个包中,那么子类继承了父类的protected,public成员变量作为子类的成员变量,并且继承了父类的protected,public方法作为子类的方法,继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包中,子类不能继承父类的友好变量和友好方法。

友好变量通常指的是没有明确的访问修饰符(public、private、protected、default)的成员变量

友好方法通常指的是没有明确的访问修饰符(public、private、protected、default)的方法。

例子

代码

Animal.java

java 复制代码
package Animal;
// 在不同包中的父类
public class Animal {
    public String publicField = "公共字段";
    protected String protectedField = "受保护字段";
    String defaultField = "默认字段";  // 包私有字段,子类无法继承
    private String privateField = "私有字段";  // 私有字段,子类无法继承

    public void publicMethod() {
        System.out.println("公共方法");
    }

    protected void protectedMethod() {
        System.out.println("受保护方法");
    }

    void defaultMethod() {
        System.out.println("默认方法");  // 包私有方法,子类无法继承
    }

    private void privateMethod() {
        System.out.println("私有方法");  // 私有方法,子类无法继承
    }
}

Main.java

java 复制代码
package Main;

import Animal.Animal;
class Dog extends Animal {
    // 子类继承了父类的protected和public成员变量
	void accessFields() {
        System.out.println(publicField);      // 可以访问父类的公共字段
        System.out.println(protectedField);   // 可以访问父类的受保护字段
        // System.out.println(defaultField);   // 无法继承父类的包私有字段
        // System.out.println(privateField);   // 无法继承父类的私有字段
    }

    // 子类继承了父类的protected和public方法
	void accessMethods() {
        publicMethod();                        // 可以调用父类的公共方法
        protectedMethod();                     // 可以调用父类的受保护方法
        // defaultMethod();                    // 无法继承父类的包私有方法
        // privateMethod();                    // 无法继承父类的私有方法
    }
}
public class Main {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.accessFields();   // 调用子类方法,访问继承的成员变量
        myDog.accessMethods();  // 调用子类方法,访问继承的方法
    }
}

运行结果

总结

继承在Java中是一种关键的面向对象编程机制,通过使用extends关键字,子类能够继承父类的属性和方法。在继承中,子类可以访问父类的public和protected成员,但不能访问private成员。通过方法的重写,子类可以提供特定于自身的实现。此外,继承是实现多态性的基础,允许父类引用指向子类对象。通过学习继承,我不仅理解了如何有效地组织和重用代码,还能够更灵活地运用多态性,提高代码的可扩展性和可维护性。

通过掌握Java继承,我在编码中实现了更高水平的代码重用,改善了代码的可读性和可维护性。能够设计合理的类层次结构,使我的代码更有组织性和可扩展性。继承的理解帮助我更好地应用多态性,提高了代码的灵活性。此外,通过深入学习继承的概念,我更容易理解和使用各种框架,同时能够更好地运用设计模式,提高了面向对象思维的水平。综合而言,通过学习Java继承,我的编程能力得到了有力的提升,使我能够更高效地开发和维护Java应用程序。

相关推荐
广师大-Wzx12 分钟前
JavaWeb:后端部分
java·开发语言·spring·servlet·tomcat·maven·mybatis
dishugj20 分钟前
HANA数据库常用命令总结
java·前端·数据库
MacroZheng22 分钟前
横空出世!IDEA最强MyBatis插件来了,功能很全!
java·后端·mybatis
zhangjw3426 分钟前
第9篇:Java集合框架入门,List详解:ArrayList与LinkedList底层彻底吃透
java·开发语言·list
大大杰哥27 分钟前
Java集合框架(List/Set/Queue)核心总结与代码示例
java·数据结构
深蓝轨迹29 分钟前
RedisTemplate 核心操作API汇总(Spring Data Redis)
java·redis·spring
Cat_Rocky34 分钟前
K8s RBAC认证 简单讲
java·docker·kubernetes
一只IT攻城狮36 分钟前
️ Spring Boot 文件上传,防御恶意文件攻击
java·spring boot·web安全
ch.ju44 分钟前
Java Programming Chapter 3——Subscript of the array
java·开发语言
雨落在了我的手上1 小时前
初识java(三):运算符
java·开发语言