Java超详细讲解继承和多态的使用

yizhihongxing

Java超详细讲解继承和多态的使用

一、继承

继承是指一个类从另一个类中继承属性和方法的能力。可以将这个继承的类称为子类(派生类),被继承的类称为父类(基类或超类)。

1.1 继承的语法

Java中使用关键字 extends 来继承一个类。

class ChildClass extends ParentClass {

}

1.2 继承的特点

  • 子类拥有父类的所有属性和方法(除了父类的构造方法和私有属性和方法);
  • 子类可以新增自己的属性和方法;
  • 子类可以重写父类的方法。

1.3 继承的示例1

下面这个例子展示了如何通过继承实现一个类的复用。

假设我们编写了一个狗的类,狗有名字、年龄、颜色等属性,还有吠叫、跑动等方法。现在我们又需要编写一个聪明的哈巴狗的类,比狗多了会数数的方法。

class Dog {
    private String name;
    private int age;
    private String color;

    public Dog(String name, int age, String color) {
        this.name = name;
        this.age = age;
        this.color = color;
    }

    public void bark() {
        System.out.println("汪汪汪!");
    }

    public void run() {
        System.out.println("狗狗在奔跑!");
    }
}

class SmartDog extends Dog {

    public SmartDog(String name, int age, String color) {
        super(name, age, color);
    }

    public void count() {
        System.out.println("1, 2, 3, 4, 5...");
    }
}

这里 SmartDog 继承了 Dog 类,所以我们不需要重新定义狗的属性和方法,而是在原有的基础上新增了一个会数数的方法。

1.4 继承的示例2

下面的例子展示了如果一个类继承了另一个类,如何重写父类的方法。

假设我们编写了一个汽车的类,汽车有颜色、价格、速度等属性,还有启动、加速、刹车等方法。现在我们又需要编写一辆自动挡汽车的类,自动挡汽车需要重新实现刹车方法,因为刹车的方式和手动挡车不同。

class Car {
    private String color;
    private int price;
    private int speed;

    public Car(String color, int price, int speed) {
        this.color = color;
        this.price = price;
        this.speed = speed;
    }

    public void start() {
        System.out.println("汽车启动了!");
    }

    public void speedup() {
        System.out.println("汽车正在加速!");
    }

    public void brake() {
        System.out.println("汽车正在刹车!");
    }
}

class AutoCar extends Car {
    public AutoCar(String color, int price, int speed) {
        super(color, price, speed);
    }

    @Override
    public void brake() {
        System.out.println("自动挡汽车正在刹车!");
    }
}

二、多态

多态是指同样的代码可以适用于不同类型的对象,也就是说,一个对象可以被看作是它所继承的类的对象,也可以被看做是实现了某个接口的对象。

2.1 多态的语法

Java中的多态实现需要依赖于继承和接口,具体的实现方式如下:

class Animal {
    public void shout() {
        System.out.println("动物在叫!");
    }
}

class Dog extends Animal {
    @Override
    public void shout() {
        System.out.println("汪汪汪!");
    }
}

class Cat extends Animal {
    @Override
    public void shout() {
        System.out.println("喵喵喵!");
    }
}

public static void main(String[] args) {
    Animal a = new Dog();
    a.shout();
    a = new Cat();
    a.shout();
}

2.2 多态的特点

  • 子类覆盖了父类的方法;
  • 父类引用可以指向子类的对象;
  • 运行时确定具体调用的方法。

2.3 多态的示例1

下面这个例子展示了如何通过多态实现方法的动态绑定。

interface Fruit {
    public void eat();
}

class Apple implements Fruit {
    @Override
    public void eat() {
        System.out.println("吃苹果!");
    }
}

class Banana implements Fruit {
    @Override
    public void eat() {
        System.out.println("吃香蕉!");
    }
}

public static void main(String[] args) {
    Fruit f = new Apple();
    f.eat();
    f = new Banana();
    f.eat();
}

2.4 多态的示例2

下面这个例子展示了如何通过多态实现方法的动态绑定。

class Person {
    public void walk() {
        System.out.println("人在走路!");
    }
}

class Student extends Person {
    @Override
    public void walk() {
        System.out.println("学生在走路!");
    }
}

public static void main(String[] args) {
    Person p = new Person();
    p.walk();
    p = new Student();
    p.walk();
}

以上就是继承和多态相关的实例讲解,希望可以帮助您理解这两个概念的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java超详细讲解继承和多态的使用 - Python技术站

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

相关文章

  • 使用logback屏蔽一些包的日志

    以下是使用logback屏蔽一些包的日志的完整攻略: 首先,在项目的classpath下创建logback.xml文件,用于配置logback的日志输出规则。 在logback.xml文件中,使用<logger>标签配置需要屏蔽日志的包名,并设置其日志级别为OFF。 示例1:屏蔽com.example.package包的日志 xml <lo…

    other 2023年10月14日
    00
  • node12值得关注的新特性

    Node12值得关注的新特性 经过长时间的开发和测试,Node.js 12已经正式发布。除了常规的安全修复、bug修复和性能优化之外,Node12还带来了一些非常值得关注的新特性,本文将对一些主要的新特性进行介绍。 V8 7.4 版本的升级 Node.js 12集成了最新的V8 JavaScript引擎版本 – 7.4。在V8 7.4中,对于开发人员来说最重…

    其他 2023年3月29日
    00
  • Android自定义控件ViewGroup实现标签云(四)

    下面是对《Android自定义控件ViewGroup实现标签云(四)》的详细讲解: 1. 概述 该教程是由某作者编写的系列教程之一,介绍了如何通过继承ViewGroup来实现一个标签云。主要有以下几个部分: 定义标签控件(TagView),继承自TextView,并设置相关属性,如颜色、圆角、间距等; 定义标签云布局控件(TagCloudView),继承自V…

    other 2023年6月25日
    00
  • PHP5.5在windows安装使用memcached服务端的方法

    一、安装memcached服务端 1.1 安装memcached 首先,需要下载并安装memcached。可以在官网下载对应的Windows版本,例如下载32位的memcached-1.4.5-win32.zip。下载后解压到某个目录下。 1.2 安装libevent 在Windows上,memcached依赖于libevent库。需要先下载并编译安装lib…

    other 2023年6月27日
    00
  • 安装mysq 5.7.20 解压版遇到的坑(推荐)

    下面是关于安装MySQL 5.7.20 解压版所遇到的坑以及解决方案的完整攻略: 1. 下载与解压 首先,我们需要先从MySQL官网下载MySQL 5.7.20的压缩包版本,具体网址为:https://dev.mysql.com/downloads/mysql/5.7.html。选择“MySQL Community Server”后,可以根据操作系统进行选择…

    other 2023年6月27日
    00
  • linux和windows查看当前运行的python进程及gpu、cpu

    当我们在使用Python编写程序时,有时需要查看当前运行的Python进程以及GPU和CPU的使用情况。在Linux和Windows中,可以使用命令行工具来实现这一目的。以下是两种示例方法: 1. 在Linux中查看Python进程和GPU/CPU使用情况 查看Python进程 可以使用ps命令来查看当前运行的Python进程。以下是示例命令: ps -ef…

    other 2023年5月8日
    00
  • java获取两个日期之间的所有日期(年月日)

    当然,我很乐意为您提供有关“Java获取两个日期之间的所有日期(年月日)”的完整攻略。以下是详细的步骤和两个示例: 1 获取两个日期之间的所有日期 要获取两个日期之间的所有日期,可以使用Java中的Calendar类和SimpleDateFormat类。以下是获取两个日期之间的所有日期的步骤: 创建两个日期对象,表示要获取的日期范围。 使用Calendar类…

    other 2023年5月6日
    00
  • Linux系统下安装.bundle后缀程序的教程

    Linux系统下安装.bundle后缀程序的教程 有些软件在Linux系统中以.bundle后缀的形式提供,这些程序通常是二进制文件的集合,需要进行特殊的安装过程。下面是在Linux系统下安装.bundle后缀程序的完整攻略: 下载.bundle文件:首先,你需要从软件的官方网站或其他可信来源下载.bundle文件。通常,这个文件会以压缩包的形式提供,你需要…

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