java 方法重写与权限修饰符以及多态和抽象类详解概念和用法

yizhihongxing

Java方法重写与权限修饰符以及多态和抽象类是面向对象编程中非常重要的概念和用法。下面将详细讲解。

Java方法重写与权限修饰符

什么是方法重写

方法重写是指在子类中重新定义继承自父类的同名方法,其方法签名(即方法的名称、参数类型和数量)必须与父类方法相同,但方法体可以不同。方法重写的目的是为了实现方法的多态性,即同一种方法,在不同的子类中所表现出的行为不同。

方法重写的规则

  • 子类方法与父类方法具有相同的名称、参数列表和方法返回类型;
  • 子类方法的访问权限不能低于父类方法的访问权限;
  • 子类方法不能抛出比父类方法更多的异常;
  • 子类方法不能重写父类方法中被 final 修饰的方法;

下面通过示例说明方法重写的使用:

class Animal {
    public void move() {
        System.out.println("动物可以移动");
    }
}

class Dog extends Animal {
    public void move() {
        super.move();
        System.out.println("狗可以跑和走");
    }
}

public class TestDog {
    public static void main(String args[]) {
        Animal animal = new Animal(); // Animal 对象
        Animal dog = new Dog(); // Dog 对象

        animal.move();// 执行 Animal 类的方法
        dog.move();//执行 Dog 类的方法
    }
}

输出结果为:

动物可以移动
动物可以移动
狗可以跑和走

权限修饰符

Java中的访问权限修饰符主要有public、private、protected和默认(即不加修饰符)。它们的具体含义如下:

  • public:表示该类、方法或成员变量对所有类可见,不论是同一个包中的类还是不同包中的类;
  • private:表示该类、方法或成员变量仅对该类内部、同一个包中的类及其子类可见;
  • protected:表示该类、方法或成员变量仅对该类内部、同一个包中的类及其子类和其他包中的子类可见;
  • 默认(不加修饰符):表示该类、方法或成员变量仅对同一个包中的类可见。

下面通过示例说明权限修饰符的使用:

class Animal {
    private String name;  // 私有成员变量

    public void setName(String name) {  // 公有成员方法
        this.name = name;
    }

    public String getName() {   // 公有成员方法
        return name;
    }
}

public class Cat extends Animal {
    private String color;  // 私有成员变量

    public void setColor(String color) {  // 公有成员方法
        this.color = color;
    }

    public String getColor() {   // 公有成员方法
        return color;
    }
}

在上面的示例中,Animal类中的成员变量name和Cat类中的成员变量color都使用了private修饰符,因此它们仅对各自的类内部可见。Animal类中的成员方法setName和getName使用了public修饰符,在类的外部可以通过对象调用这两个方法。Cat类中的成员方法setColor和getColor也使用了public修饰符,在类的子类和类的外部都可以通过对象调用这两个方法。

多态和抽象类

什么是多态

多态是指同一种类型的对象,在不同的情况下表现出不同的行为,即同一种对象在不同的场景下具有不同的状态和行为。多态分为编译时多态和运行时多态。

编译时多态

编译时多态是指在编译时确定方法的调用对象和方法的实现体,即在编译时就确定方法的行为。编译时多态主要通过方法的重载来实现。

运行时多态

运行时多态是指在运行时确定方法的调用对象和方法的实现体,即在运行时根据对象的实际类型来确定方法的行为。运行时多态主要通过方法的重写和接口来实现。

什么是抽象类

抽象类是一种不能被实例化的类,该类主要用于作为其他类的父类,为子类提供统一的接口和行为。抽象类中可以包含抽象方法和非抽象方法,其中抽象方法必须由子类来实现。

下面通过示例说明多态和抽象类的使用:

abstract class Animal {
    protected String name;

    public Animal(String name) {
        this.name = name;
    }

    public abstract void eat();  // 抽象方法

    public void sayHello() {    // 非抽象方法
        System.out.println("我是一只" + name);
    }
}

class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    public void eat() {   // 实现抽象方法
        System.out.println(name + "喜欢吃鱼");
    }
}

class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    public void eat() {   // 实现抽象方法
        System.out.println(name + "喜欢吃骨头");
    }
}

public class TestAnimal {
    public static void main(String args[]) {
        Animal animal1 = new Cat("小猫");  // 使用父类引用变量存储子类对象
        animal1.sayHello();
        animal1.eat();  // 执行子类的实现方法

        Animal animal2 = new Dog("小狗");  // 使用父类引用变量存储子类对象
        animal2.sayHello();
        animal2.eat();  // 执行子类的实现方法
    }
}

在上面的示例中,Animal类是一个抽象类,其中包含一个抽象方法eat和一个非抽象方法sayHello。Cat类和Dog类继承自Animal类,并实现了抽象方法eat。TestAnimal类中创建了Animal类的对象animal1和animal2,它们分别存储了Cat类和Dog类的对象。由于Cat类和Dog类继承自Animal类,因此可以使用Animal类的引用变量来存储它们的对象。当调用animal1.eat()时,实际上是调用了Cat类中的eat方法;当调用animal2.eat()时,实际上是调用了Dog类中的eat方法。这体现了运行时多态的特性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 方法重写与权限修饰符以及多态和抽象类详解概念和用法 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • C语言PlaySound函数使用方法

    下面是关于C语言PlaySound函数使用方法的完整攻略。 什么是PlaySound函数? PlaySound函数是Windows系统提供的一个API函数,它可以播放.wav、.mid等音频文件。 PlaySound函数的语法格式 BOOL PlaySound( LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound )…

    other 2023年6月26日
    00
  • 在vue项目中引入scss并使用scss样式详解

    在Vue项目中引入SCSS并使用SCSS样式详解 在Vue项目中,我们可以使用SCSS(Sass)来编写样式,并通过引入SCSS文件来使用这些样式。下面是在Vue项目中引入SCSS并使用SCSS样式的完整攻略。 步骤一:安装依赖 首先,我们需要安装相关的依赖。在Vue项目的根目录下,打开终端并执行以下命令: npm install sass-loader n…

    other 2023年7月29日
    00
  • 个人FTP建站域名解析serv-u常见问题解决方法之完全解决方案

    个人FTP建站域名解析 什么是FTP建站 FTP建站是将您的网站放到一台有公网IP地址的计算机上,并使用FTP协议让外部网络可以访问这台计算机上的网站,从而实现发布自己的网站。 如何进行FTP建站 进行FTP建站需要以下几个步骤: 购买一个公网IP地址,或者选择一个拥有公网IP地址的计算机。 安装FTP服务器软件,例如FileZilla Server、Ser…

    other 2023年6月27日
    00
  • Java数据结构和算法之冒泡,选择和插入排序算法

    Java数据结构和算法之冒泡、选择和插入排序算法 冒泡排序算法 算法思路 冒泡排序是一种基础的排序算法,它通过比较相邻元素的大小并交换位置,将最大(或最小)的元素逐步“冒泡”到序列的最后,从而完成排序。 具体地,冒泡排序的过程如下: 从序列的第一个元素开始,依次比较相邻的两个元素,如果前面的元素大于后面的元素,则交换它们的位置。 继续依次比较相邻的元素,直到…

    other 2023年6月27日
    00
  • redhat linux 安装 gcc编译器

    Red Hat Linux安装GCC编译器攻略 步骤1:检查GCC是否已安装 在终端中运行以下命令检查GCC是否已安装: gcc –version 如果GCC已安装,将显示GCC的版本信息。如果未安装,继续以下步骤。 步骤2:更新软件包列表 在终端中运行以下命令更新软件包列表: sudo yum update 这将更新系统的软件包列表,确保安装最新的软件包…

    other 2023年10月13日
    00
  • html2canvas生成的图片偏移不完整的解决方法

    下面是详细讲解“html2canvas生成的图片偏移不完整的解决方法”的完整攻略: 问题描述 在使用html2canvas进行网页截图时,有时会出现截图偏移、不完整的情况,这个问题通常是由于网页中存在定位、层叠、溢出等样式导致的。 解决方法 一、增加canvas的width和height html2canvas截图时,会将整个网页转化为一张canvas图片。…

    other 2023年6月27日
    00
  • Flash AS3教程:ClassLoader类

    下面是详细讲解“Flash AS3教程:ClassLoader类”的完整攻略。 ClassLoader类 ClassLoader类是一个可以在运行时动态加载SWF文件或者外部PNG、JPG等图片格式文件的类。使用ClassLoader能够使我们的应用程序获取更多的数据和功能,来实现更多炫酷的效果。在本篇教程中,我们将学习如何使用ClassLoader类来动态…

    other 2023年6月26日
    00
  • mybatis小于

    以下是详细讲解“MyBatis小于的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: MyBatis小于的用法 在MyBatis中,小于操作符可以用于查询满足某个条件的所有记录。是小于操作符的详细介绍和用法。 小于操作符 小于操作(<)用于查询满足某个条件的所有记录,该条件是某个字段的值小于指定的值。以下是小于操作符的语法: SE…

    other 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部