黑马程序员——多态,继承;抽象类

本文详细介绍了面向对象编程中的多态概念及其作用,包括编译时多态和运行时多态的区别。并通过实例展示了如何使用抽象类和抽象方法来实现多态行为,帮助读者更好地理解和应用这些核心概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- android培训java培训、期待与您交流! ----------

多态的作用:

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

只修改方法的实现,不必修改方法的声明

继承是多态产生的前提条件;

 

分类:

编译时多态:方法重载

运行时多态:方法覆写

 

Eg:
package test;
 
class Dog{
    void eat(){
        System.out.println("一般的狗吃一般的狗粮!");
    }
}
 
class HashDog extends Dog{
    void eat(){
        System.out.println("哈士奇吃哈士奇的狗粮!");
    }
}
 
class ZangAoDog extends Dog{
    void eat(){
        System.out.println("藏獒吃藏獒的狗粮!");
    }
}
 
//定义一个动物园喂的方法
class Zoo{
   
    void feed(Dog d){
        d.eat();
    }
   
}
 
public class Demo11 {
    public static void main(String[] args) {
       
        Dog hd = new HashDog();
       
        Dog zd = new ZangAoDog();
       
        Zoo z = new Zoo();
        z.feed(hd);
        z.feed(zd);
    }
}


 

输出:

哈士奇吃哈士奇的狗粮!

藏獒吃藏獒的狗粮!



抽象类

 

当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的行为方式,那么这些方法都有具体的方法体。

但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。

 

抽象方法的定义:通过abstract关键字来修饰的类称为抽象类;

 

我的总结:

抽象类用private修饰,里面可以有用private修饰的方法(没有方法体),强制子类进行覆写;

可以理解为:具有某些公共方法的一个总结类。

 

可以定义被abstract修饰的抽象方法

抽象方法只有返回类型和方法签名,没有方法体。

 

备注:

抽象类可以含有普通方法

抽象类不能创建实例对象(不能new)

需要子类覆盖掉所有的抽象方法后才可以创建子类对象,否则子类也必须作为抽象类

列举常见的几个抽象类:

流的四个基本父类

InputStream,OutputStream,Reader,Writer

 

我的总结:

抽象类是类的一种特殊情况:据有类的一切特点,但是不能实例化;一般的都得带有抽象方法。

抽象类不可以实例化,有时看到的近似实例化是多态机制的体现,并不是真正的实例化。

Eg:
Socket s = new Socket();
OutputStream os = s.getOutputStream();
左边是OutputStream类型变量的声明,右边是获取抽象类OutputStream的一个实例对象!
 
package testDemo2;
 
abstract class Person{
}
 
class Student extends Person{
}
 
public class Demo2 {
    public static void main(String[] args) {
        Person p = new Student();//体现的是多态,父类声明实例化子类对象。而不是抽象类实例化
    }
}


 

 

 

abstract方法

 

分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是功能声明相同,但功能主体不同。

 

那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。

 

abstract [非private访问修饰符] 返回值类型 方法名称(参数列表);

抽象方法要存放在抽象类中。

抽象方法也可以存在于接口中

 

Eg:
package reviewDemo;
 
abstract class Person3{
    abstract void show();
    abstract void inof();
    void turn(){
    }
}
 
class NewP extends Person3{
    @Override
    void show() {
    }
 
    @Override
    void inof() {
    }
    //不覆写的话会报错
}
 
public class Demo15 {
    public static void main(String[] args) {
        //new Person3();报错!因为抽象类不可以实例化
    }
}




资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值